当前位置: 代码迷 >> J2SE >> java 获得泛型里的方法,该怎么解决
  详细解决方案

java 获得泛型里的方法,该怎么解决

热度:83   发布时间:2016-04-24 01:21:29.0
java 获得泛型里的方法
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方法,。。求解高手


------解决方案--------------------
Java code
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());
------解决方案--------------------
Java code
LZ,劝你别钻牛角尖了,目前的java做不到为什么需要子类才能知道具体的类型?你可以把代码改改就知道了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();    }}
  相关解决方案