日期:2014-05-20 浏览次数:20828 次
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());
------解决方案--------------------
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(); } }