-3

I need to cast a value by an unknown class name. Here is an example of what I need to do :

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

So as you can see, I need to cast with the parameter type of the map key

Is it possible? Othewise, how can I do such a cast.

thanks

4

3 回答 3

4

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

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

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

于 2013-05-30T16:46:50.667 回答
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

将产品编译警告。

我希望我的解释有所帮助。我相信您实际上是想问其他将您带到这个问题的问题。我认为你应该问你的第一个问题。可能社区将能够帮助您更深入地了解您的问题并找到更好的解决方案。

于 2013-05-30T16:46:59.593 回答
0

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

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

于 2013-05-30T16:55:50.723 回答