使用变量类名称的Java动态转换

时间:2015-12-29 20:38:58

标签: java

如果我有一个变量方法param,它需要一个Class来强制转换,我该如何动态实现强制转换?我将如何声明变量result

显然这是错误的,

public void test(Class destinationClass)
{
   (destinationClass)result = (destinationClass)getObject();
}

注意:getObject()返回一个可转换为Destination Class的对象。 Destination Class对象是getObject()的子对象。

3 个答案:

答案 0 :(得分:2)

public <T> void test(Class<T> destinationClass) {
  T result = destinationClass.cast(getObject());
  ...
}

答案 1 :(得分:0)

如果要动态创建对象,可以使用反射(这在编译时不知道确切类型时很有用)

public <T> T getObj(Class<T> target){
T obj= target.getConstructor().newInstance();
return obj;
}

这假设目标类有一个no-args构造函数,但是你看到了模式。

答案 2 :(得分:0)

这是通用方法的一种情况。

class MyObject {
    private Object obj;

    public void setObject(Object o) {
        this.obj = o;
    }

    public <T>T getObject() { //notice return type
        return (T) obj;       //and cast
    }
}

然后只需使用此代码运行它,看看它的作用。

MyObject o = new MyObject();

o.setObject("Hello World!");
String s = o.getObject();
System.out.println(s);

o.setObject(1000);
Integer i = o.getObject();
System.out.println(i);

s = o.getObject(); //will throw exception because the object is an integer

//can also use this to specify return type
o.<Integer>getObject();