我有以下代码:
public class MyClass {...}
private void foo(MyClass _param)
void caller {
Object obj = new MyClass();
foo((MyClass)obj);
}
我只想提及MyClass
一次,稍后再按如下方式使用:
void caller {
Class<?> clazz = MyClass.class;
...
Object obj = new clazz();
foo((clazz)obj); // compile error: "unknown class 'clazz'"
}
有可能实现吗?
答案 0 :(得分:3)
不,不是。创建一个为你做演员表的方法。
private MyClass cast(Object obj)
{
return (MyClass) obj;
}
这将是一个更通用的解决方案:
void caller()
{
Class<MyClass> clazz = MyClass.class;
Object obj = new MyClass();
foo(cast(obj, clazz));
}
private <T> T cast(Object obj, Class<T> clazz)
{
return (T) obj;
}
在您的示例中,您编写了Object obj = new clazz();
,可以将其写为MyClass obj = clazz.newInstance();
。
答案 1 :(得分:0)
正如@Jesper所建议的那样,我是使用class.cast(obj)
在自己的代码中完成的:
public class MyClass {...}
private void foo(MyClass _param)
void caller {
Class<?> clazz = MyClass.class;
...
Object obj = new clazz();
//foo((clazz)obj); // compile error: "unknown class 'clazz'"
foo(clazz.cast(obj)); // <-- do this instead
}