铸造与未知的类

时间:2013-05-30 16:26:44

标签: java casting

我需要通过未知的类名来转换值。以下是我需要做的一个例子:

Filter filter = session.getFilter(aName);
for (Object key :filter.getFilterDefinition().getParameterTypes().keySet() ){
filter.setParameter("param1",filter.getFilterDefinition().getParameterType(key.toString()).getReturnedClass()) 
value )
}

正如您所看到的,我需要使用地图键的参数类型进行强制转换

有可能吗?那么,我怎么能做这样的演员。

感谢

3 个答案:

答案 0 :(得分:2)

我不是100%确定我理解你的问题。但是如果你有一个Object myObject,并且你有一个类的名字,你想把它转换成一个String

String className = "com.mycompany.Foo";
Class<T> c = Class.forName(className);
T castToT = c.cast(myObject);

如果您事先知道className是某个类或接口T的子类,这似乎才有用。因为否则T必须是Object,并且您正在做很多工作。

答案 1 :(得分:0)

按照定义操作,在编译时“转换”类型到另一个类型,因此用括号写的类型必须写成硬编码。因此,操作(o.getClass())obj没有任何意义。

此外,您所投射的类必须可分配给作业左侧所写的类型。因此表达:

OneClass o = (OtherClass)obj;

仅在OneClass可分配OtherClass时才有效。

第三点。 o.getClass()返回o的类。将某个类的对象转换为同一个类没有任何意义。

MyClass obj = new MyClass();
// obj is an instance of MyClass

尝试执行此演员:

(MyClass)obj

将产品编译警告。

我希望我的解释有所帮助。我相信你真的想问另外一个带你到这个问题的问题。我想你应该问第一个问题。可能社区将能够帮助您更深入地了解您的问题并找到更好的解决方案。

答案 2 :(得分:0)

请告诉您需要执行此操作的用例?您是否尝试使用此策略在运行时强制转换引用?请确保您没有打造不相关的类型。

使用这种策略的应用程序通常不易维护和调试。