У меня есть экземпляр хранения данных String, integer, double, ... и я сохраняю данные (Oblect dataHolder
) и (Class dataHolderClass
). Мой вопрос заключается в том, как отливать назадdataHolder
- int
, String
...?Объект Java casting с использованием класса
Например у меня есть следующий класс данных:
class DataHolderClass {
private Object data;
private Class classData;
DataHolderClass(Object data, Class dataClass) {
this.data = data;
this.classData = dataClass;
}
Object getDataBack() {
return this.data;
}
Class getDataClassBack() {
return this.classData;
}
}
Так как я могу бросить данные обратно зная dataClass
и имеющие data
? А вот некоторый код вызова (не уверен, если это возможно сделать такой вид магии):
.....
public void foo(DataHolderClass input) {
Class inputClass = input.getDataClassBack();
Constructor constr = inputClass.getConstructor();
DataType recoveredData = constr.newInstance();
// ^------- the DataType is defined in inputClass but how can I get it?
recoveredData = (DataType) input.getDataBack();
...
}
Используя [общий тип] (https://docs.oracle.com/javase/tutorial/java/generics/types.html). – Seelenvirtuose
Не понимаю. В чем? Если на вызывающем узле уже есть переменная некоторого типа для хранения данных, то это тип, на который выполняется преобразование. Если это не так, зачем вам бросать? – EJP
У меня есть второй класс с методом, который получает DataHolderClass в качестве аргумента. Извлекает данные из объекта DataHolderClass и использует его (для чего-то). Но он возвращает данные (как-то) к исходному типу данных (classData). – Banish