Java千百问_05面向对象(014)_如何获取范型的类Class

点击进入_更多_Java千百问

1、如何获取范型的类Class

java中,无法获取范型的类型,例如:

public class Box<T> {

  public static void main(String[] args) {
     System.out.printf(T);//编译错误
  }
}

其实,由于java是强类型语言,在编译时我们并不知道T是什么具体类型,只有在编译后,不同场景指定之后才会知道,所以在编译前是无法获取T的类型。如果想获取T的类型,可以在泛型类中声明一个对象,通过对象获取当前指定的类型。

例如:

public class TestGeneric<T> {

    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }

    public void test() {
        System.out.println(t.getClass() + ", " + t);
    }

    public static void main(String[] args) {
        TestGeneric<String> testGeneric = new TestGeneric<String>();
        testGeneric.setT("test");
        testGeneric.test();
    }
}
时间: 2024-08-11 11:57:14

Java千百问_05面向对象(014)_如何获取范型的类Class的相关文章

Java千百问_05面向对象(005)_接口和抽象类有什么差别

点击进入_很多其它_Java千百问 1.接口和抽象类有什么差别 在Java语言中.抽象类abstract class和接口interface是抽象定义的两种机制. 正是因为这两种机制的存在,才赋予了Java强大的面向对象能力.抽象类abstract class和接口interface在对于抽象定义方面具有非常大的类似性.甚至能够相互替换.因此非常多开发人员在进行抽象定义时对二者的选择显得比較任意.事实上,两者之间还是有非常大的差别.对于它们的选择能反映出对问题本质的理解.对设计意图的理解. 了解

Java千百问_05面向对象(006)_is-a,has-a,like-a是什么

点击进入_很多其它_Java千百问 1.is-a,has-a,like-a是什么 在面向对象设计的领域里,有若干种设计思路,主要有例如以下三种: is-a.has-a.like-a java中在类.接口.抽象类中有非常多体现. 了解java看这里:什么是Java 了解类和对象看这里:类.对象究竟有什么秘密 了解接口和抽象类看这里:接口和抽象类有什么差别 2.is-a是什么 is-a.顾名思义,是一个.代表继承关系. 假设A is-a B,那么B就是A的父类. 一个类全然包括还有一个类的全部属性及

Java千百问_05面向对象(008)_java中覆盖是什么

点击进入_很多其它_Java千百问 1.什么是覆盖 在java中,覆盖是针对继承才有的概念,某一个子类须要某些方法或属性,但又不想使用父类中的同名的方法或属性,就须要使用覆盖. 直白的来说,就是在子类中编写与父类同名.同參数.同返回值的方法,或同名.同类型的属性.子类对象调用该方法/属性时.运行的是子类的方法.而不会运行父类的方法(除非在方法第一行写super();会先运行父类方法.再继续运行子类代码. ) 了解类的构造函数看这里:类.对象究竟有什么秘密 了解很多其它继承看这里:java类的继承

Java千百问_06数据结构(024)_用二进制如何表示整型数值

点击进入_更多_Java千百问 1.用二进制如何表示整型数值 我们都知道,计算机只认识0.1二进制,我们一般操作的寄存器和存储单元也都只认识二进制,我们称一个二进制为一个bit(位),一般32位计算机的寄存器允许操作32bit的数据,即32个0或1,由于书写过长,我们一般使用十六进制表示(每两个十六进制成为一个byte字节,即8bit=1byte).例如: 1111 1111 1111 1111 1111 1111 1111 1111 = ffffffff 了解32位和64位计算机看这里:32位

Java千百问_08JDK详解(014)_如何编写JVMTI agent程序

点击进入_更多_Java千百问 1.如何编写JVMTI agent程序 了解JPDA看这里:JPDA是什么 了解JVMTI看这里:JVMTI是什么 我们需要使用C++编写agent程序,JVM在不同时机回调下面的接口函数: JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *o

Java千百问_01基本概念(014)_同步、异步有什么区别

点击进入_更多_Java千百问 1.同步.异步有什么区别 在进行网络编程时,我们通常会看到同步.异步.阻塞.非阻塞四种调用方式以及他们的组合. 了解阻塞.非阻塞看这里:[阻塞.非阻塞有什么区别][2] [2]: 其中同步方式.异步方式主要是由客户端(client)控制的,具体如下: 同步(Sync) 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 根据这个定义,Java中所有方法都是同步调用,应为必须要等到结果后才会继续执行.我们在说同步.异步的时候,一

Java千百问_07JVM架构(014)_什么是Dump文件

点击进入_更多_Java千百问 1.什么是Dump文件 Dump文件是进程的内存镜像.可以把程序的执行状态通过调试器保存到dump文件中. Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开. 当我们的程序发布出去之后,在客户机上是无法跟踪代码的,所以Dump(扩展名是 .dmp)文件对于我们来说特别重要.我们可以通过.dmp文件把出现问题的情况再现,然后根据再现的状况(包括堆栈调用等情况),可以找到出现问题对应的行号. 2.如何生成Dump文件 生成Dump文

Java千百问_01基本概念(001)_什么是Java

点击进入_更多_Java千百问 1.什么是Java Java是一种开发语言(核心特点:跨平台,面向对象,名称由来看这里:J2EE里面的2是什么意思),对于开发者来讲,Java基本等于Jdk. Jdk的版本介绍看这里:[Java都有那些版本][3] 开发人员一般通过IDE(Eclipse.NetBeans.JBuilder等)编写.编译Java代码(在远古没有IDE的时代,都是用文本编辑器编写,使用javac编译),在这个过程中,会使用到Jdk与第三方Jar包(Jar包即一组编译后的类打成的压缩包

Java技术_Java千百问(0029)_类、对象到底有什么秘密

点击进入_更多_Java千百问 1.类.对象的概念是什么 Java是目前应用最为广泛的面向对象特的语言,它具有以下基本概念: 类 对象 方法 抽象化 多态性 继承 封装 我们首先看看类和对象的概念. 类 类是一个模版.是一个可以定义一类具有相同属性.行为的模版. 例如:狗是一个类,它具有四肢.尾巴.头.脊椎等属性,具有吠叫.吃.繁殖等行为. 对象 对象是一个具体实例.根据是一个类的具体实例. 例如:我家对门养的一只狗,具体到了某一只. 2.Java如何定义类 类的定义如下︰ public cla