2010-03-31 102 views
0

我加载使用铸造对象的

的Class.forName(klassname,假,装载机)

一类这种i之后创建使用

klass.newInstance(一个实例); 它会返回一个对象类型。我想将它转换为特定类型(即.Klassnamw实例)。我使用普通投射,但由于它在运行时没有解析而被挂起。我该如何投射它?Hellp

+0

这不是逻辑上不可行吗? – shinkou 2010-03-31 05:29:27

回答

3

Casting通常用来给编译器提供更多信息。你在编译时没有这些信息,所以你不能把它给给编译器。

此外,铸造的重点通常是让你可以找到某些其他人不会知道的成员 - 但如果你在执行时间之前不知道这个类,你怎么知道这些成员?

在某些情况下,它会很好,但它们非常罕见。创建完实例后,你想要做什么?如果你正试图调用你在编译时知道的方法,你可以使这些方法成为接口的一部分,并将其转换为接口

+0

谢谢reply.Yes我会调用一些方法,我知道我会尝试与接口。其实我需要它的休眠框架。我想要一个会话实例。我试图通过加载配置并创建它的实例来实现它。之后,我创建了sessionfactory,然后session.I在第一部分本身被击中 – Steven 2010-03-31 05:33:53

+0

@Steven:您应该能够转换为Configuration,SessionFactory或Session,否? – Thilo 2010-03-31 05:39:49

+0

谢谢我得到了你们俩都说的 – Steven 2010-03-31 05:40:36

0

您正在使用反射,因为您不知道(或无法解析)要在编译时加载的类。

因此,您不能上课。

除非有一个接口(或父类)可以在编译时解析(并因此转换为),否则必须使用反射来执行对该对象有用的任何操作。

+0

是的,谢谢得到它 – Steven 2010-03-31 05:40:53