问个类型下溯的问题 如果要完全还原,还是要用判断,就是用if (obj instanceof xxx)来判断是什么类型,如果你的程序允许的话。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果 传进的对象名字未 obj,那么就用obj.getClass().getName(),然后再把它new Instance 呵呵,if (obj instanceof xxx)这样的话,Java的数据类型有好多种啊,如果是自己定义的类,那就是无数啦。这样岂不是累死?而且n多if( )写在程序也是难看啊。有没有简单好用一点的方法。知道类或是方法的名字,用反射Reflect可以得到和调用这个类和方法。难道知道一个对象的名字,却不能将它还原到它的原型? to littletuzi(小小兔子):是不能new Instance()的,我传进来的值还要使用的,new Instance()就是一个新的对象了。 launch401(launch401) :是的,obj.getClass().getName()可以得到类的名字,但是如何转换成这个类型? reflect和instanceof 差不多吧 RTTI的问题,应该只有用instantceof 或是 reflection我不知道你要怎么用你的对象?如果你要把method方法写成与传进来的obj的特性无关的话,那用处就不大了,那就用reflection吧,否则肯定要用if判断的。 在这里并不是用method(Integer), method(String) 这样的重载方法。只有一个方法method(Object),所以用Reflect是解决不了问题的。用instanceof是一个方法,不过我觉得太笨重了。:) thinking in java中也论述过这个问题,好像就是用if判断的,他有一种改良方法是把type写在数组了,这样就不用很多if了,但本质还是判断。 直接强制转换:例if(obj.getClass().getName().equeal("Integer"){Integer i = (Integer)obj;} 呵呵,你这样转换不如:if( obj instanceof Integer){ Integer i = (Integer)obj;} 请问 launch401(launch401):Thinking in Java中讲到这个问题是在第几页?很久没翻这本经典书。请告诉我让我查一下。谢谢。 使obj下溯到原类型需重新定义一个对象变量,此对象变量类型为原类型,非Object。与instanceof不同:obj.getClass().getName().equeal("java.lang.Integer")就用这个笨方法 to ntzls(三星堆):牛人,请解释一下instanceof 与 equals有什么不同,并说明在这里用equals的优越性在哪里?我觉得用obj instanceof Integer 比obj.getClass().getName().equals("java.lang.Integer")要好。 instanceof判定返回true仅表示左边的实例可安全的强制转换为右边类,形如(右边类)左边实例,保准不会发生异常。而obj.getClass()返回的是此对象的原生类型Class,根据你的需求,应用getClass()来进行判断更恬当。public class T{ public static void main(String[] args){ TT tt = new TT(); System.out.println(tt instanceof TTT);//false System.out.println(tt instanceof TT);//true System.out.println(tt instanceof T);//true,非原生类型 System.out.println(tt.getClass().equals(TTT.class));//false System.out.println(tt.getClass().equals(TT.class));//true,此法亦可 System.out.println(tt.getClass().equals(T.class));//false }}class TT extends T{}class TTT extends TT{}BTW:XX法师是牛人,偶不是:-) 出血了!!整合一套培训时候的视频和笔记很HAPPY,从基础到框架要的可以留个邮箱! 更改Mysql数据库文件的保存后,如何更改源代码 求教如何解决滚动条到底重复触发的问题 为什么接口中的方法不可以声明为protected或默认? 问几个很简单的问题 怎么将Byte类型 转化成 Byte[4] 数组 ToolTip的问题,绝对准时结账. 关于抽象类的问题 哪里有java教程下载,关键讲swing的 作为一个程序员技术、素质上的要求? 求:scjp考试大纲中的一条 关于java Applet的IE载入问题。
有没有简单好用一点的方法。
知道类或是方法的名字,用反射Reflect可以得到和调用这个类和方法。
难道知道一个对象的名字,却不能将它还原到它的原型?
是不能new Instance()的,我传进来的值还要使用的,new Instance()就是一个新的对象了。
是的,obj.getClass().getName()可以得到类的名字,但是如何转换成这个类型?
我不知道你要怎么用你的对象?如果你要把method方法写成与传进来的obj的特性无关的话,那用处就不大了,那就用reflection吧,否则肯定要用if判断的。
只有一个方法method(Object),所以用Reflect是解决不了问题的。
用instanceof是一个方法,不过我觉得太笨重了。
:)
例
if(obj.getClass().getName().equeal("Integer"){
Integer i = (Integer)obj;
}
if( obj instanceof Integer){
Integer i = (Integer)obj;
}
Thinking in Java中讲到这个问题是在第几页?很久没翻这本经典书。
请告诉我让我查一下。谢谢。
牛人,请解释一下instanceof 与 equals有什么不同,并说明在这里用equals的优越性在哪里?我觉得用obj instanceof Integer 比
obj.getClass().getName().equals("java.lang.Integer")要好。
public static void main(String[] args){
TT tt = new TT();
System.out.println(tt instanceof TTT);//false
System.out.println(tt instanceof TT);//true
System.out.println(tt instanceof T);//true,非原生类型
System.out.println(tt.getClass().equals(TTT.class));//false
System.out.println(tt.getClass().equals(TT.class));//true,此法亦可
System.out.println(tt.getClass().equals(T.class));//false
}
}
class TT extends T{}
class TTT extends TT{}BTW:XX法师是牛人,偶不是:-)