如果我有一个变量方法param,它需要一个Class来强制转换,我该如何动态实现强制转换?我将如何声明变量result
?
显然这是错误的,
public void test(Class destinationClass)
{
(destinationClass)result = (destinationClass)getObject();
}
注意:getObject()返回一个可转换为Destination Class的对象。 Destination Class对象是getObject()的子对象。
答案 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();