Reputation: 141
I have the following code:
public class MyClass {...}
private void foo(MyClass _param)
void caller {
Object obj = new MyClass();
foo((MyClass)obj);
}
I want to mention MyClass
only once and use it later as follows:
void caller {
Class<?> clazz = MyClass.class;
...
Object obj = new clazz();
foo((clazz)obj); // compile error: "unknown class 'clazz'"
}
Is it possible to achieve?
Upvotes: 3
Views: 2399
Reputation: 6887
No, it's not. Create a method which do the cast for you.
private MyClass cast(Object obj)
{
return (MyClass) obj;
}
This would be a more generic solution:
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;
}
In your example, you wrote Object obj = new clazz();
this can be written as MyClass obj = clazz.newInstance();
.
Upvotes: 4
Reputation: 3310
As suggested by @Jesper, I did it in my own code using 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
}
Upvotes: 0