动态定义对象问题

phoow 2004-01-27 03:22:12
有谁知道动态定义对象方法?
以及动态判别该对象属于哪一类型?
public class Test {
public void test(){
System.out.println("Test ++++++++++++++++++ test");
}
public static void main (String args[])throws Exception{
System.out.println("Test start !");

Test o=(Test) Class.forName("Test").newInstance();
o.test();
}
}
如上程序中 把Test o=(Test) Class.forName("Test").newInstance();
变成Object o=(Test) Class.forName("Test").newInstance();
如何调用 o的test方法?
...全文
55 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xufeihong2000 2004-06-16
  • 打赏
  • 举报
回复
请问楼主:
Method method = o.getClass().getMethod("test", new Class[]{});
method.invoke(o, new Object[]{});//=o.test();

这个Method 是从哪里来的啊!!?

我也有类似的问题!!
phoow 2004-01-27
  • 打赏
  • 举报
回复
不好意思,弄错了。下次补上
phoow 2004-01-27
  • 打赏
  • 举报
回复
不好意思,弄错了。下次补上
phoow 2004-01-27
  • 打赏
  • 举报
回复
xiexie
3kl 2004-01-27
  • 打赏
  • 举报
回复
Method method = o.getClass().getMethod("test", new Class[]{});
method.invoke(o, new Object[]{});//=o.test();
phoow 2004-01-27
  • 打赏
  • 举报
回复

Method method = o.getClass().getMethod("test", new Class[]{});
method.invoke(o, new Object[]{});//=o.test();
这里用Method 类解决了调用的问题。
大家看看还有没有 动态强制转换对象的技巧?
感谢大家的参与!!!
phoow 2004-01-27
  • 打赏
  • 举报
回复
其实 lasersong2004(路宋) 使用的是工厂模式 ,很好可以解决绝大多数的问题,也非常的规范。不过可惜,还有许多不规范的事情。尽管如此,也是要加分的。好主意么
phoow 2004-01-27
  • 打赏
  • 举报
回复
我感谢大家的指点。谢谢
public class Test {
public void test(){
System.out.println("Test ++++++++++++++++++ test");
}
public static void main (String args[])throws Exception{
System.out.println("Test start !");

Object o= Class.forName("Test").newInstance();
// o.test(); 这行如何执行???
}
}
其中 test方法名字 是从一个列表中获得。。。
我想我没说清楚我的问题,我是想要创建Test 的对象(假设在此程序编译前,我还不知道有这个类)
lasersong2004 2004-01-27
  • 打赏
  • 举报
回复
补充一下,不要用到Object这么绝。因为虽然用户类都会隐含
继承Object,但是Object中并没有定义你的test(),编译肯定
过不了。
还有一个很烂的方法:
class Objeot extends java.lang.Object{
void test(){

}
}
public class Test extends Objeot{
public void test(){
System.out.println("Test ++++++++++++++++++ test");
}
public static void main (String args[])throws Exception{
System.out.println("Test start !");

Objeot o=(Test) Class.forName("Test").newInstance();
o.test();
}
}

就好像“全庸”,“吉龙”的小说一样,哈哈
(*)绝对能
swinging 2004-01-27
  • 打赏
  • 举报
回复
“ 我的困难是从List中获取对象是不知道如何使用对象的方法”
强制类型转换,比如你的下面这句:
Object o= (Test) Class.forName("Test").newInstance();

这句里面的“(Test)”就是强制类型转换,这里你把对象实例赋值给引用“o”,其实不需要进行转换,如果要访问Test的方法,那么:
((Test) o).test()
就可以。
lasersong2004 2004-01-27
  • 打赏
  • 举报
回复
如下,使用多态:
interface iTest{
public void test();
}

public class Test implements iTest{
public void test(){
System.out.println("Test ++++++++++++++++++ test");
}
public static void main (String args[])throws Exception{
System.out.println("Test start !");

iTest o=(iTest) Class.forName("Test").newInstance();
o.test();
}
}

(*)如果你的List中的对象都是同一个类的实例,做一个
公共接口,包括该类的方法,然后让该类implements it.
以后就都用这个接口作为访问类型。
okwuzhijun 2004-01-27
  • 打赏
  • 举报
回复
把Test o=(Test) Class.forName("Test").newInstance();
变成Object o=(Test) Class.forName("Test").newInstance();
是不能调用o.test();的。因为Object类没有这个方法,你需要准确地造型成Test对象。
当你从List中取得一个对象时将它造型成相应的类行就能用了,目前就只能这样做,jdk1.5可能有新方法,那是1.5出来以后的事。
phoow 2004-01-27
  • 打赏
  • 举报
回复
欢迎大侠指教 我的困难是从List中获取对象是不知道如何使用对象的方法,
原因是我不能在定义对象时就指定该对象的类。大家说说怎么办?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧