首先有一个类如下:
[code="java"]public class Base {
protected Class entityClass;
public Base() {
}
public Base(Class<T> clz) {
this.entityClass = clz;
}
}[/code]
这是一个泛型类
有一个Father类:
[code="java"]public class Father {
}[/code]
然后有一个MyBase1:
[code="java"]public class MyBase1 extends Base {
}[/code]
通过泛型类将Father注入到了MyBase1中,现在测试:
[code="java"]MyBase1 mbase=new MyBase1();
System.out.println(mbase.entityCLass);[/code]结果输入为空,这里如果在MyBase1中增加构造函数:
[code="java"]public class MyBase1 extends Base {
public MyBase1(){
super.entityClass=Father.class;
}[/code]这样才能输出结果,请问如果不增加任何构造函数如何实现能够输出System.out.println(mbase.entityCLass)的值为Father呢?而且如果使用了构造函数那么使用有什么意义!盼望高手回答!
}
[code="java"] Type t = this.getClass().getGenericSuperclass();
if (ParameterizedType.class.isAssignableFrom(t.getClass())) {
for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) {
System.out.print(t1);
}
}[/code]
这个虽然短,我想对你有意义。
[quote]protected Class entityClass;[/quote]
换个角度来考虑,entityClass就是一个普通的变量。
如果是调用父类的时候,public Base(Class clz)调用该构造方法会将entityClass赋值。。
而子类的构造函数中什么都没干,直接调用父类的 public Base() ,那么还是什么都没干。。
当然其不会输出任何东西了。
[color=indigo]1.为什么为空不输出? 这个和泛型没有关系[/color][quote]public class Base {
protected Class entityClass;
public Base() {
}
public Base(Class<T> clz) {
this.entityClass = clz;
}
} [/quote]
你这个父类 的entityClass 域成员 没有默认值 而你初始化的时候 用的是子类无参构造器 也没有给父类的这个域成员 赋值 当然为空了。 如果构造器里不加参数,如何让打印的有值? 构建完之后,用set方法注入呗,呵呵。
[color=indigo]2.泛型 [/color] [quote]public class Base { [/quote]
这个T 是干麻的? 这个T 你可以想成它就是个object 实际上 在进行泛型解析的时候,如果没有具体的类型 的确就是默认成object类型的 但是你也可以替换成任何类型 这样[quote]public class Base {
protected Class entityClass;
public Base() {
}
public Base(Class<T> clz) {
this.entityClass = clz;
}
} [/quote]
的子类,就可以进行限制了
[color=indigo]http://www.fh888.com/showfile.html?articleid=51203542FC8943AE9D3B91C7FA4F5507&projectid=5&username=yhn
http://blog.csdn.net/bluesmile979/archive/2009/03/10/3976905.aspx
泛型是很常用的,你可以根据上面的两个链接好好研究下 希望对你有帮助[/color]