public class Deal<T>{ public void getTargetMethod(){
//能不能获得T这个类的实例,或者T里面的方法
}
}假如有上边这个类,能不能通过某种方法在getTargetMethod获得T里面的某一个方法。
有class Person{
public void eat(){};
}
比如:传入Deal<Person> p=new Deal<Person>();,现在调用p.getTargetMethod(),能不能在方法里回调eat方法,。。求解高手
//能不能获得T这个类的实例,或者T里面的方法
}
}假如有上边这个类,能不能通过某种方法在getTargetMethod获得T里面的某一个方法。
有class Person{
public void eat(){};
}
比如:传入Deal<Person> p=new Deal<Person>();,现在调用p.getTargetMethod(),能不能在方法里回调eat方法,。。求解高手
解决方案 »
- 关于反射机制 获取类的方法参数类型返回值是Class类型的数组的 好处在哪里
- java中怎么计算一个线程(或一个程序的)运行时间和占用的内存量?
- 问个傻瓜问题
- 如何实现JTextField鼠标双击事件,急救!!!
- 怎么样设置和取出SESSION的值?谁能给我一个例子?
- 请问如何获取某个class对应的存储路径?
- 焦急!StringBuffer问题
- java基础问题,接口、抽象中方法的默认类型是什么?
- 关于Method 类的问题
- 关于Java多线程的Lock和Condition
- socket问题啊!
- 我在做一些http相关的程序,但是不知道为什么,当运行到getInputStream函数时,程序就中止了
public class Deal<T> {
public void getTargetMethod(T t) {
try {
Method method=t.getClass().getMethod("eat");
method.invoke(t);
} catch (XXX e) {}
}
}Deal<Person> deal=new Deal<Person>();
deal.getTargetMethod(new Person());
public Dao(){
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
clazz = (Class) pt.getActualTypeArguments()[0];
System.out.println("clazz = " + clazz);//可以打印传过来的泛型信息
}
}class AppleDao extends Dao<Apple>{
//增册改查方法
}class Apple{
private String color;
private String price;
private String weight;
}像这样就可以获得相应的泛型信息,却没有泛型对象。求再帮忙
为什么需要子类才能知道具体的类型?你可以把代码改改就知道了
class AppleDao extends Dao<T> { //子类在这里继续使用泛型,LZ看看还能拿到具体类型吗? --A
//增册改查方法
}所以说
public class Deal<T>{ //这里的T也是泛型,所以
public void getTargetMethod(){
//这里能拿到也是T泛型,不是具体类型,和--A的道理一样
//泛型在编译的时候被擦除,被用Object来代替,可以通过以下代码验证
try {
for (TypeVariable tv : this.getClass().getTypeParameters()) {
System.out.printf("name=%s\n", tv.getName()); //这里得到的是T --B
for (Type t : tv.getBounds()) {
System.out.printf("class=%s\n", t); ////这里得到的是Object --C
}
//如果子类用<Apple>继承,也就是子类用具体类型而不是泛型,那么就如LZ的例子,
//--B可能得到的就是Apple,--C处得到的就是Apple的class
}
} catch (Exception e) {
e.printStackTrace();
}
}
//子类在这里继续使用泛型,LZ看看还能拿到具体类型吗? --A
什么意思
我现在明白我的想法是实不了的,除非才用二楼那样传个泛型对象,可是感觉为什么呢,继承都可以,,,,,,,你很棒,,在下佩服。。
class AppleDao extends Dao<T> { //子类在这里继续使用泛型,LZ看看还能拿到具体类型吗? --A 注意这两行代码的区别,就知道我说的意思了
Dao<Apple> 和 Dao<T> 的区别