2013-11-09 6 views
0

Возможно ли в Java использовать значение переменных для типа?Java - использовать значение переменной для присвоения типа другой переменной?

Например:

String s = "String"; 

А потом я хотел бы создать еще одну переменную z, которая могла бы использовать s значение для его типа. Можно ли это сделать? Может быть, с отражением или какой-то другой техникой?

Update:

Если это не возможно, таким образом, может быть, кто-то может предложить, как дать тип для переменной, когда вы получите то, что типа это из XML-файлов атрибутов? Как

<tag type="String">MyValue</tag>

И тогда я мог бы использовать значение type атрибутов для определения типа переменных?

+0

Вы хотите, чтобы значение с до г? Так что z будет содержать «String»? –

+0

Я хочу, когда я создам переменную z, его тип будет определен с использованием значения переменной s. Как s z; (просто используя значение s как его тип). – Andrius

+0

Этот пример, который вы дали, по-прежнему использует тот тип, который должен иметь, например String и Integer. P.S Кроме того, почему голос? – Andrius

ответ

1

Вы ищете что-то вроде этого:

public static void main(String[] args) { 
    String s = "java.lang.String"; 

    Object o = "Some Value"; 

    Class<?> type; 
    try { 
     type = Class.forName(s); 
     getValue(type, o); 
    } catch (ClassNotFoundException e) { 
     // class was not found 
     e.printStackTrace(); 
    } 
} 

private static <T> T getValue(Class<T> desiredType, Object o) { 
    if (o.getClass().isAssignableFrom(desiredType)) { 
     return desiredType.cast(o); 
    } else { 
     throw new IllegalArgumentException(); 
    } 

} 
+0

Спасибо. Это то, что я мог бы использовать. – Andrius

0

Я не знаю языка, который позволяет это так, как вы написали, и о других способах: вы можете достичь этого с помощью typedef на C или C++, но не на Java. Тем не менее, вы можете часто расширить класс как это:

public class myName extends originalClassName {} 

, а затем использовать Myname вместо originalClassName. Однако вы не можете сделать это с помощью String, что является окончательным и, следовательно, не может быть унаследовано после.

Смежные вопросы