2013-05-30 66 views
-4

我需要通过一个未知的类名来铸造一个值。这里是什么,我需要做的一个例子:铸造未知类

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

因此,大家可以看到,我需要的参数类型的地图键

是否有可能来投?不管怎样,我怎么能做这样的演员。

谢谢

+1

不,不可能。您可以使用'instanceof'运算符来检查对象引用是否来自某个类。 –

+6

为什么要将其转换为未知的东西,然后将其分配给'String'引用?这没有意义。 – Keppil

+2

如果可以的话,可能有人会问这么做吗? –

回答

1

我不是100%确定我理解你的问题。但是,如果你有一个对象myObject的,你有这个类的名字,你想将它转换为一个字符串

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

这只有当你事先知道,似乎有用的类名是一些类的子类或接口T.原因,否则T必须是对象,你正在做很多工作没有。

+0

这就是我需要的谢谢! 那么,'anInstance.getClass()。cast(anotherInstance)'工作正常,没有编译或runttime错误 – javaxiss

+2

@Issam编译并不意味着它会做你期望的事实... –

+0

@LuiggiMendoza它做我所期望的功能上;-) – javaxiss

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

意志产品的编译警告。

我希望我的解释有所帮助。我相信你真的想问一个让你接触到这个问题的其他问题。我认为你应该问你的第一个问题。社区可能会帮助你更深入地理解你的问题并找到更好的解决方案。

+0

为什么写在括号中的类型必须是硬编码的?编写'OtherClass'或'otherInstance.getClass()'不等于?我相信'getClass()'操作会返回所需的类型 – javaxiss

0

你能告诉用例你需要这样做吗?你是否试图在运行时使用这个策略来转换引用?请确保你没有输入不相关的类型。

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

+0

我需要50个声望分数才能将其移到注释中。如果这是正确的,那么如果有人可以帮助把它移到评论部分。我只想添加评论。 –