Class<T>无法初始化,跪求高人解答

问题描述

首先定义一个Javabean:publicUser{}然后定义一个类:publicclassGenericDao<T>{privateClass<T>clazz;//定义泛型publicGenericDao(){System.out.println(clazz);}publicstaticvoidmain(String[]args){GenericDao<User>gd=newGenericDao<User>();}}运行结果为null也就是说clazz并没有被赋值,请问这是怎么回事?怎样才能赋值呢?

解决方案

解决方案二:
你的clazz没有实例化要打印肯定为null,Class类的实例化有几种方式:例如:Classstr=String.class;这种方式打印str结果就是:classjava.lang.String还有其他实例化方法自己google吧
解决方案三:
针对你的Class类使用了泛型,要想实例化:可以进行强制转化例如:Clazz=(Class<T>)String.class是同样的道理
解决方案四:
引用2楼ak47zhoujun123的回复:

针对你的Class类使用了泛型,要想实例化:可以进行强制转化例如:Clazz=(Class<T>)String.class是同样的道理

是这样,我想使用Hibernate的Session.get(Class,Serializable)方法而这个Class可能是不同的类型,因此需要使用上面的构造方式,你说的是强制转换,这个我明白,问题是在不同情况下,我根本不知道应该用哪个类进行强转……
解决方案五:
也就是说,clazz属性的类型应该是动态的,所以才需要用到泛型
解决方案六:
刚刚在这里发现一个方法:http://www.blogjava.net/calvin/archive/2006/04/28/43830.html里面提到可以用clazz=(Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];来动态赋值,但是我运行以后报了Exceptioninthread"main"java.lang.ClassCastException:java.lang.Class
解决方案七:
Cast抽象类型,只要求你的对象实例本身的真实类型是兼容的就行了,你直接写成(Class)xx.getClass()就行了,运行时不会出错的。importjava.util.Date;publicclassGenericDao<T>{privateClass<T>clazz;publicGenericDao(Ttarget){this.clazz=(Class)target.getClass();System.out.println(clazz);}publicstaticvoidmain(String[]args){GenericDao<String>gd=newGenericDao<String>("");GenericDao<Date>gd2=newGenericDao<Date>(newDate());}}

解决方案八:
根本就没初始化参数打印出来肯定是null了
解决方案九:
引用6楼humanity的回复:

Cast抽象类型,只要求你的对象实例本身的真实类型是兼容的就行了,你直接写成(Class)xx.getClass()就行了,运行时不会出错的。Javacodeimportjava.util.Date;publicclassGenericDao<T>{privateClass<T>clazz;publicGenericDa……

humanity的传参方式是的确可行的,非常感谢!但是如果有另一个类继承了GenericDao,则必须实现这个带参数的构造方法,要进行赋值的话,也只能通过这个带参的构造方法。这个限制貌似比较不合适。我通过上面那个网址找到一个解决方案:clazz=(Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];没怎么看懂……请大家指教!
解决方案十:
packagecom.test.appdemo;publicclassGenericDao<T>{privateClass<T>clazz;//定义泛型publicClass<T>getClazz(){returnclazz;}@SuppressWarnings("unchecked")publicvoidsetClazz(Tclazz){this.clazz=(Class<T>)clazz;}@SuppressWarnings("unchecked")publicGenericDao(Tuser){this.clazz=(Class<T>)user.getClass();}publicstaticvoidmain(String[]args){GenericDao<User>gd=newGenericDao<User>(newUser("Chris","Canada"));System.out.println(gd.getClazz());}}classUser{privateStringname;privateStringaddress;publicUser(Stringname,Stringaddress){this.name=name;this.address=address;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetAddress(){returnaddress;}publicvoidsetAddress(Stringaddress){this.address=address;}}

解决方案十一:
ilrxx谢谢你的回复,但是你的意思实际上跟humanity是一样的,在功能上是有限制的。请关注我在8楼的回帖,非常感谢!

时间: 2024-08-13 13:53:11

Class&amp;lt;T&amp;gt;无法初始化,跪求高人解答的相关文章

mfc-新作的MFC release项目出现闪退现象,求高人解答!!!

问题描述 新作的MFC release项目出现闪退现象,求高人解答!!! 忘了说,debug和release的exe都会有这样的问题,但是在VS平台下打开没问题我打开弄好的exe后, 出来一个小窗口, 对话框吧,很快就闪退了.能看到里面有 正在试图恢复你的信息 可能要等几分钟的时间 的字样,原来的debug的exe也一样,但是在VS2013下 运作完全没问题,求大神们解析一下,万分感谢 这是我尝试了十多次终于截到的图片 忘了说,debug和release的exe都会有这样的问题,但是在VS平台下

关于Sony Ericsson SDK 2.5.0.3 for the Java ME的一个问题,有做过开发的进,求高人。

问题描述 我在做海外游戏移植的时候遇到一个问题,经过研究,发现代码始终在g3d.bind(g);上报空指,这里是省略写法,g3d是有初始化的,打印也是有内存的,g的话,直接用paint(g)里的g,试过,自己申明一个Graphicsg,在初始化也试过,不过还是在那句上报空指.然后我直接去SDK-API,Graphics3D下直接拷贝DEMO到IDE上,还是在g3d.bind(g)这句报空指针错误,求高人解决,下面附上DOMO代码.importjavax.microedition.lcdui.Ca

急~~~~ 使用using Microsoft.Office.Interop.Excel 给定关键字不在字典中

问题描述 asp.net项目里面使用usingMicrosoft.Office.Interop.Excel组件做报表导出的使用报给定关键字不在字典中~~~~本地测试没有问题,上传到服务器上后报这个异常注:2008版本服务器麻烦各位帮忙看看,小弟先谢谢了///<summary>///DataSet导出Excel///</summary>///<paramname="page">页面对象</param>///<paramname=&qu

java-动态规划初始化问题,类似于下面这道题leetcode:Scramble String

问题描述 动态规划初始化问题,类似于下面这道题leetcode:Scramble String Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively. Below is one possible representation of s1 = "great": great / gr eat / / g r e at

环信3.0初始化问题

问题描述 导入环信libs下的文件及文件夹,完成初始化代码运行的时候会崩,错误: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.administrator.xwchat_30-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.administrato

关于初始化的问题,求解答

问题描述 关于初始化的问题,求解答 1:int a=10; 2: int a; a=10; 上面两个都是初始化吗? 初始化是对变量第一次赋值就叫初始化,还是说在定义变量的同时赋值才叫初始化? 求解答 解决方案 两段代码产生的机器码是一样的,它们等价. 在C语言中, int a;就已经分配了空间 a = 1;这个赋了一个值 很多书上说叫做"赋初值",其实对于非常数,编译器不管什么初不初的. int a = 1;就是把这两步在一句话中写完了. 解决方案二: 初始化和变量声明是明显有区别的,

exe作为系统服务进程,如何初始化com环境?

问题描述 做了一个系统服务,是和mssql数据进行连接的.数据库连接采用ado技术,需要初始化com环境.问题来了:系统服务是system,初始化com一直失败,不知道如何初始化,求解救.以调用这个CoInitialize(NULL);m_pConnection.CreateInstance("ADODB.Connection");#ifdef_DEBUGif(m_pConnection==NULL){_DbgPrint("Connection对象创建失败!请确认是否初始化了

C#可不可以异步初始化用户控件

问题描述 我现在要初始化多个用户控件,控件初始化很慢,我想异步初始化,求大神指教 解决方案 解决方案二:不懂你说的"初始化"是什么意思.异步操作,看你自己的程序设计流程就行了.不要纠结于什么编程技术,而是要看你的流程.解决方案三:如果你就是扣一个"初始化"的帽子,这个就是死板得硬要用点技术术语"显得与别人不一样似地",而不真正仔细研究流程.如果你不真正研究流程,而满脑子只有一个技术名词儿,谁知道你还有没有什么可能去把技术玩转起来呢?解决方案四:我

Spring初始化Map的问题

问题描述 action中定义的mapprivateMap<String,String>myMap=newHashMap<String,String>();publicMap<String,String>getMyMap(){returnmyMap;}publicvoidsetMyMap(Map<String,String>myMap){this.myMap=myMap;} xml配置如下<beanid="complaintAction&quo