黑马程序员技术交流社区

标题: java中获取泛型的实际类型,请问如何做? (请不要简单的说... [打印本页]

作者: 丶小天    时间: 2014-2-20 12:12
标题: java中获取泛型的实际类型,请问如何做? (请不要简单的说...
  1. class B{...}
  2. class C{...}

  3. class A<T> {

  4.         T tt;

  5.         public void showType(){
  6.                 // 这里获取到T的实际类型
  7.         }

  8.         public static void main(String args[]){
  9.                 A<B> a1 = new A<B>();
  10.                 a1.showType();  // 这里打印出T(或者tt)的类型是B
  11.                 A<C> a2 = new A<C>();
  12.                 a2.showType();  // 这里打印出T(或者tt)的类型是C
  13.         }
  14. };
复制代码

作者: 汪平乐    时间: 2014-2-21 10:41
看了你的代码,因为你的T tt属于类属性,只是进行了声明,没有进行赋值操作,返回的是null,只要对tt进行赋值操作就可以了。如:   void  setT(T tt){
                                     this.tt = tt;
                             }
                                    showType(){
                                         SOP(tt);
                                    }
你给出的题目我目前只能这样,有原来的题目吗?
   
作者: 夏新¤Amoi    时间: 2014-2-21 12:23
T.getClass().getName();
这是别人说的,我也不是很懂的。
作者: 汪平乐    时间: 2014-2-21 13:13
夏新¤Amoi 发表于 2014-2-21 12:23
T.getClass().getName();
这是别人说的,我也不是很懂的。

查了资料,下面是完整的代码:
class Gen<T> {
private T ob; //定义泛型成员变量
public Gen(T ob) {
this.ob = ob;
}
public T getOb() {
return ob;
}
public void setOb(T ob) {
this.ob = ob;
}
public void showType() {
System.out.println("T的实际类型是: " + ob.getClass().getName());    //利用反射获取}
}
可以看出,T声明后是要赋值的,不然会报NullPointerExecption的...





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2