Stephan Leila
Stephan Leila

Reputation: 141

How to save type as a variable and use it in cast

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

Answers (2)

kai
kai

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

Benrobot
Benrobot

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

Related Questions