如何在子类中获得泛型的具体类型

ca_la 2012-04-04 02:38:50
Parent:

package test;

public interface Parent<R> {

public R parentMethod();
}


Child:

package test;

public interface Child extends Parent<ActualType>{

public ActualType ChildMethod();
}


ActualType:

package test;

public class ActualType {

}


Test:

package test;

import java.lang.reflect.Method;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
Method [] methods = Child.class.getMethods();
for(Method method : methods){
Class<?> clazz = method.getReturnType();
System.out.println("Method:"+method.getName()+",ReturnType:"+clazz.getName());
}
}

}


结果:
Method:ChildMethod,ReturnType:test.ActualType
Method:parentMethod,ReturnType:java.lang.Object
期望结果:
Method:ChildMethod,ReturnType:test.ActualType
Method:parentMethod,ReturnType:test.ActualType
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
txzsp 2012-04-05
  • 打赏
  • 举报
回复
不确定
皮特张 2012-04-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
达不到期望结果的

Java code

public interface Parent<R> { //这个R是泛型,编译时被擦除,
//因为编译器不知道R将被用户赋予什么类型,但又不能不编译,
//所以统一用Object来管理

public……
[/Quote]
JavaMan 2012-04-04
  • 打赏
  • 举报
回复
不确定,泛型很强大!
qybao 2012-04-04
  • 打赏
  • 举报
回复
达不到期望结果的
public interface Parent<R> { //这个R是泛型,编译时被擦除,
//因为编译器不知道R将被用户赋予什么类型,但又不能不编译,
//所以统一用Object来管理

public R parentMethod(); //所以这里返回的R就是Object
}

public interface Child extends Parent<ActualType>{ //这个ActualType是具体存在的类型
//编译时编译器能确定这个具体的类型

public ActualType ChildMethod(); //所以这里返回的就是确定的ActualType
}





MiceRice 2012-04-04
  • 打赏
  • 举报
回复
泛型之存在于编译态,运行态不存在泛型,所以也不可能被得知。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧