如何将类型保存为变量并在强制转换中使用它

时间:2016-07-20 10:01:07

标签: java

我有以下代码:

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'"
}

有可能实现吗?

2 个答案:

答案 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
  }