Java的getClass()
2015-12-01 11:08
387 查看
我们都知道Class是用来描述类的,在类的内部通过getClass方法得到的结果是当前类的全名。那如果在父类使用getClass,得到的是子类class还是父类class呢?
如下:package com.hzl.test1;
public class TestPrint{
private class Test1{
private Test1(){
System.out.println(this.getClass());
}
}
public void test(){
new Test1();
}
public static void main(String[] args) {
TestPrint tp = new TestPrint();
tp.test();
}
}
输出为:class com.hzl.test1.TestPrint$test1,这是无可厚非。现在添加内部类Test2,让Test2继承Test1,在Test1构造器里输出getClass:
package com.hzl.test1;
public class TestPrint{
private class Test1{
private Test1(){
System.out.println(this.getClass());
}
}
private class Test2 extends Test1{
}
public void test(){
new Test2();
}
public static void main(String[] args) {
TestPrint tp = new TestPrint();
tp.test();
}
}
输出:class com.hzl.test1.TestPrint$Test2
发现,此时打印出的是子类的信息。说明this代表的都是当前new的对象。现在将Test1定义为抽象类
package com.hzl.test1;
public class TestPrint{
private abstract class Test1{
private Test1(){
System.out.println(this.getClass());
}
}
private class Test2 extends Test1{
}
public void test(){
new Test2();
}
public static void main(String[] args) {
TestPrint tp = new TestPrint();
tp.test();
}
}
正常打印:class com.hzl.test1.TestPrint$Test2
所以我们平时在开发时,抽象Dao层的时候,可能会有如下代码段
public abstract class DaoSupportImpl<T> {
private Class<T> clazz;
public DaoSupportImpl() {
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 这才是DaoSupportImpl
this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
}
如下:package com.hzl.test1;
public class TestPrint{
private class Test1{
private Test1(){
System.out.println(this.getClass());
}
}
public void test(){
new Test1();
}
public static void main(String[] args) {
TestPrint tp = new TestPrint();
tp.test();
}
}
输出为:class com.hzl.test1.TestPrint$test1,这是无可厚非。现在添加内部类Test2,让Test2继承Test1,在Test1构造器里输出getClass:
package com.hzl.test1;
public class TestPrint{
private class Test1{
private Test1(){
System.out.println(this.getClass());
}
}
private class Test2 extends Test1{
}
public void test(){
new Test2();
}
public static void main(String[] args) {
TestPrint tp = new TestPrint();
tp.test();
}
}
输出:class com.hzl.test1.TestPrint$Test2
发现,此时打印出的是子类的信息。说明this代表的都是当前new的对象。现在将Test1定义为抽象类
package com.hzl.test1;
public class TestPrint{
private abstract class Test1{
private Test1(){
System.out.println(this.getClass());
}
}
private class Test2 extends Test1{
}
public void test(){
new Test2();
}
public static void main(String[] args) {
TestPrint tp = new TestPrint();
tp.test();
}
}
正常打印:class com.hzl.test1.TestPrint$Test2
所以我们平时在开发时,抽象Dao层的时候,可能会有如下代码段
public abstract class DaoSupportImpl<T> {
private Class<T> clazz;
public DaoSupportImpl() {
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 这才是DaoSupportImpl
this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
}
相关文章推荐
- AES —— JAVA中对称加密和解密
- spring mvc 事务配置,spring 事务配置说明
- Spring事务管理的三种方式
- Java基础01 从HelloWorld到面向对象
- spring中注解的实现原理
- SpringMVC 拦截器实现原理和登录实现
- springMVC重定向
- Java streamtool
- Eclipse Rap开发 异步刷新UI处理
- Java图形化界面设计——布局管理器之null布局(空布局)
- Java图形化界面设计——布局管理器之CardLayout(卡片布局)
- Java图形化界面设计——布局管理器之GridLayout(网格布局)
- Java图形化界面设计——布局管理器之BorderLayout(边界布局)
- Java图形化界面设计——布局管理器之FlowLayout(流式布局)
- Java图形化界面设计——中间容器(Jpanel)
- Java图形化界面设计——容器(JFrame)
- 搭建springMVC+Mybatis的Maven项目过程中遇到的问题汇总。
- Java快速教程
- java集合框架总结
- javadoc 警告:编码 GBK 的不可映射字符