问个类型下溯的问题 如果要完全还原,还是要用判断,就是用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法师是牛人,偶不是:-) 求教使用JAVA操作word文件的方法 求助,用JSP做网页结果报错如下为什么呀? 怎样用JMagick合并两幅图片??? 急急 帮忙看一下我在SWT中应用Timer类的程序,那出问题了! 关于时间格式转换的问题 关于转义字符串的小问题! 如何提取一个分数的分子,分母 关于使用paintComponent的一个问题 怎么知道对象名? 我想学习JAVA,请高手们指点一下如何掌握这块儿肥肉? 求: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法师是牛人,偶不是:-)