2015-12-29 2 views
0

Если у меня есть параметр переменной метода, который принимает класс для приведения в действие, как мне динамически реализовать бросок? И как бы объявить переменную result?Динамическое литье в Java с переменным именем класса

Очевидно, что это не так,

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

Примечание: GetObject() возвращает объект преобразуемым назначения класса. Объект класса назначения является дочерним элементом getObject().

+0

Что возвращает метод getObject? – QuakeCore

+2

Что вы ожидаете от этого динамического приведения? Вы можете вызвать только метод, который известен во время компиляции. Вы можете проверить 'destinationClass.isInstance (getObject())' –

+0

getObject() возвращает объект, который можно использовать для класса назначения. Destination Class - это дочерний объект общего объекта, возвращаемый getObject(). –

ответ

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

Вы можете использовать отражение, если вы хотите создать объект динамически (это полезно, когда точные типы не известны во время компиляции)

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

Это предполагает, что целевой класс имеет no-args, но вы видите шаблон.

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(); 
Смежные вопросы