Метод, который возвращает объект с неизвестным типом, который хранится в переменной

107
06 января 2022, 14:30

В программировании я довольно молод и неопытен. Потому не удаётся мне реализовать одно дельце. У меня есть метод, который возвращает объект типа T, который у нас первоначально неизвестен. На деле это будет класс, находящийся в массиве:

List<Class> classes

Так вот, сам метод будет принимать какой-нибудь объект и индекс, который и будет означать номер класса в массиве classes. Метод должен возвратить объект, переведенный к типу этого самого класса.

public <T> T get(Object obj,int int){return (T)obj;}

Вот тут и начинаются проблемы: как же сообщить дженерику T, какой у нас должен получится метод? Пробовал так(см. ниже), ругается IDE, мол, нельзя переприсвоить значение классу T

public <T> T get(Object obj,int index){
    T=classes.get(index);
    return (T)obj;
}
Answer 1

То, что вы хотите сделать делается так:

public <T> T cast(Object obj, int i){
    Class<T> clazz = (Class<T>)classes.get(i);
    return clazz.cast(obj);
}

Обычно вообще принято передавать сам класс в качестве параметра, т.е. ваш код может выглядеть ещё как-то так, но для этого в принципе и метод может быть лишним:

someMethod() {
    //...
    castObject(myObject, classes.get(i));
    //...
}
public <T> T castObject(Object obj, Class<T> clazz){
    return clazz.cast(obj);
}

Но учтите: то, что вы хотите сделать это прямой путь выстрелить в ногу и получить ClassCastException, поэтому прежде чем это делать, нужно понимать зачем вам это и нельзя ли как-то заменить эту задачу другой, менее опасной.

READ ALSO
Каков механизм добавления элементов в ArrayList?

Каков механизм добавления элементов в ArrayList?

Как этот процесс устроен внутри ArrayList? Хотелось бы узнать подробности реализацииКак оно значениями оперирует? В частности - что и как делает...

190
Написание JPQL запроса

Написание JPQL запроса

Собственно нужно правильно написать запрос взять из таблицы фамилию ,которая чаше всех встречается за полгода

138
Появление клавиатуры фризит recycleview

Появление клавиатуры фризит recycleview

Есть несколько recycleview с разным количеством элементов загружаемых с сервератак же есть searchview реализован getFilter

218