判断intanceof class1 or class2
强转调用方法。
强转调用方法。
解决方案 »
- 推荐一个blog--> htmlparser.com.cn
- java中的class类继承JFrame,为什么出现JPanel上的控件不能移动被锁定了还出现一个空对象的异常但运行没错误???高手帮帮!!!
- IT人离开IT还能干什么
- 谁分析过struts源代码?
- 如何在swing中制作浮动窗体,就像在Eclipse或Jb左侧的窗口可以任意拖动和拼接
- 菜鸟的编译问题(使用的是JCreator)
- 如何把时间以固定字符串格式输出?
- 请问thread和runable的区别
- J2SDK-1_3_0_02-WIN.EXE在xp中如何设置?
- 谁知道类“JPEGImageEncoder”在哪里能找到?
- Java io问题, 菜鸟求解
- Array问题!
if(o instanceof class1){
((class1)o).print();
}
else if(o instanceof class2){
((class2)o).print();
}这样可以不?
应该写个interface 让class1 和 class2分别实现print方法.
直接
interface.print就可以了.
就不用这么麻烦了.
if(a instanceof class1){
........
}
else if(a instanceof class2){
.........
}
"kingfish");
c.getMethod("print", new Class[] {String.class}).invoke(c.newInstance(),new Object []{"kingfish"});
Inf接口中声明方法print
分别由class1和class2来实现
newInstance出来的实例转型成Inf
由接口来调用interface Inf{
void print();
}class1 implements Inf{
public void print(){
System.out.print("111111");
}
}class2 implements Inf{
public void print(){
System.out.print("22222");
}
}Inf inf=(Inf)(this.getClass().getClassLoader().loadClass(formClassName).newInstance());
inf.print();OK...
批判kingfish(八百里秦川@龙城异客) ( )楼下的那位,,抄人家不说,还抄的不对
Object o = c.getMethod("print", new Class[] {}).invoke(c.newInstance());
这里的o按楼主的说法返回的是Boolean类型的
boolean result=c.getMethod("print", new Class[]{}).invoke(c.newInstance());
你也写,晕死,呵呵
try{
Object yourclass =this.getClass().getClassLoader().loadClass("").newInstance();
Object o = yourclass.getClass().getMethod("print", new Class[]{}).invoke(yourclass,new Object[]{});
}
catch(Exception e){}
我写的有问题我承认
但是我楼上的写的对吗?
你自己运行过吗????以后说话请注意一点
哎,只是句玩笑,你也这么当真
如果你介意,那么我道歉好了。
你认为那句有问题, 请指正.
"kingfish");
-------
最后一个的invoke()方法的最后一个参数是Object[]
那么是我无知,OK。
谢谢指教!
or
invoke(Object, obj1, obj2);
所以也没啥好争的, 大家都对, 版本问题.
楼主早点揭帖吧.
您的意思是如果方法类似invoke(Object,Object[])的,写成invoke(Object, obj1, obj2)会在编译的时候自动转换吗?那么如果类似invoke(Object[], Object[])的怎么区分呢?或许是我不太了解1.5的新特性吧,不过jFresH_MaN(TM),如果你也不知道这个的话,能解释一下你的boolean result=c.getMethod("print", new Class[]{}).invoke(c.newInstance());吗?我指的不是那个boolean
的意思是你可以传2个或者2个以上的参数,但是从第2个开始的参数都会保存在一个数组里面
所以1.5版本以前的数组参数都可以用这样来实现了从本质来说invoke(Object,Object ...args)就是invoke(Object[], Object[])
for(Object s:args){
System.out.println(s);
}
}现在invoke已经改为invoke(Object,Object ...args)了
public static void t(Object ...args) {
System.out.println("\nargs.length="+args.length);
for (Object o : args) {
System.out.print(o+" ");
}
} public static void main(String[] args) {
t("1", "2", "3");
t(new Object[] {"1", "2", "3"});
}
}输出是完全相同的