A. java中的泛型的问题
public BaseDao(){
Class clazz=this.getClass(); //通过当前对象(this)获取当前类
clazz.getGenericSuperclass(); //返回当前类的父类的Type
//转换成有泛型的ParameterizedType类
ParameterizedType parameterizedType=(ParameterizedType)clazz.getGenericSuperclass();
//上面三句其实就是为了获取BaseDao类本身
Type[] types = parameterizedType.getActualTypeArguments();
this.type=(Class<T>)types[0];
//上面两句是获取运行期的泛型类型,返回给当前对象(this)的type属性
}
B. java中如何得到泛型参数的class
在Java中,泛型的类型信息在运行时确实无法直接获取,这主要是因为编译器在编译过程中会移除泛型类型信息。然而,我们可以通过反射机制间接获取到泛型的具体类型。例如,假设有一个父类Parent,它声明了一个泛型参数T:
public class Parent<T> { ... }
如果有一个子类Child继承自Parent,并且指定了泛型参数,我们可以在Child类中使用反射获取到这个泛型参数的具体类型。具体实现方式如下:
首先定义父类Parent:
import java.lang.reflect.ParameterizedType;
public class Parent {
public Parent() {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
System.out.println("type==" + type);
System.out.println("entityClass==" + type.getActualTypeArguments()[0]);
System.out.println("getOwnerType==" + type.getOwnerType());
System.out.println("getRawType==" + type.getRawType());
}
}
然后定义子类Child,指定泛型参数:
public class Child extends Parent<String> {
}
通过这种方式,我们可以在Child类的构造函数中打印出父类Parent中泛型参数的具体类型。这展示了如何在运行时获取到泛型参数的类型信息。
需要注意的是,这种方法依赖于反射机制,因此会增加程序的复杂性和运行时的性能开销。此外,这种方法仅适用于泛型参数类型在继承关系中明确指定的情况。
总结来说,虽然Java中泛型类型信息在运行时不可直接获取,但通过反射机制我们可以间接地获取到这些信息,这对于某些特定场景下的类型检查和操作非常有用。
C. java的类是什么意思
使用Java语言意味着面向对象的编程。所以,你必须要学会如何创建、引用和继承已建立的类。
Java的结构是基于面向对象思想的。除了那些最基本的类型如整数、单精度浮点数之外的其它成分,均是以类的形式出现的。正是由于Java的面向对象特性,所以它能给用户提供一种具有良好的可扩充性的编程环境,并使得程序员可以充分利用别的程序员的成果,而不必重复以前的工作。
学习完本章后,你应该是已经可以轻松地创建自己的类,并能引用和继承已有的类,这将不公使你有能力去编写更简捷更有效的代码,同时也是进一步学习Java所必需的。
定义类的结构
每个对象都是属于某种type(即类型、类别或者种类),例如“作者”这个“对象”或者“物体”就属于“人类”这个类别,拖鞋属于“鞋类”等等。再Java中,用type的同义词class表示类型,中文术语译为“类”。
■ 类的基本概念
■ 类的基本组成
■ 类的实例创建
类的成员函数的说明与使用
我们把属性和方法成为这个对象的“成员”,因为它们构成一个对象的主要部分,没有了这两样东西,那么对象也没有什么存在的意义了。哪怕只是一粒石头,或许它没有什么操作的方法,但是也有描述它的属性。真的存在没有属性和方法的类,不过它产生出来的对象规则,然后遵守这个规则的对象,才能去做某些特定的事情。
■ 类的成员函数的说明
■ 不同类型的成员函数
■ 成员函数的重载
■ 静态成员
■ 构造和析构成员函数
建立Java的应用程序
只要类中有一个名为main的方法,那么这个类就可以成为一个能够被JVM调用运行的 Java Application。 不过这个方法有四个必要的声明条件:
1. 声明为public;
2. 必须是类一级的(static) ;
3. 没有返回值(viod);
4. 只有一个String类型的数组当作参数。
这四个条件缺一不可。
■ main成员函数
■ 命令行参数
■ 轻松处理命令行参数
类的集合 — 包
■ 理解包(package)的基本概念
■ 定义一个包
■ 引用已定义过的包
类的深入研究
■ 在Java中使用继承
■ 成员函数的重载
■ 使用接口
■ 类的转换
■ null,this和supper变量