Member 12695967 Ответов: 1

Вопрос о объявлении универсального метода java


Просто быстрый вопрос о Java generic method declaration for my revision for exam

если я хочу объявить метод, который вернет список обученных студентов, сдавших экзамен, например
правильный ответ таков

static List<taught> passed(List<taught>)


как насчет этого способа, возможно ли это ? если это невозможно, то почему?

static <T> List<T> passed(List<T extends Taught>)


static <T> List<T> passed(List<T super Taught>)


Что я уже пробовал:

Я пробовал это, и это будет правильно, потому что его возвращаемый тип четко написан, то есть List & lt;teached>

static List<taught> passed(List<taught>)

1 Ответов

Рейтинг:
10

Afzaal Ahmad Zeeshan

Следующий тип невозможен,

static <T> List<T> passed(List<T extends Taught>)

Потому что статика не может быть универсальной. Снять <T> передо мной static и вы остаетесь с тем же общим объявлением функции, что и раньше. :смеяться:

Если вы хотите использовать универсальные возвращаемые типы (которые вы хотите использовать!), то вам нужно создать универсальный класс в Java. Класс будет определять, какой тип возвращаемых значений будет использоваться. Это будет выглядеть примерно следующим образом,
class MyClass <T> {
    public MyClass() {
    }
    
    // Tricky part
    static <T extends Object> T passed (Class<T> paramType) {
       // Code here.
    }
}

// Use as
MyClass<string> obj = new MyClass<string>();

Вы можете изменить общие параметры для поддержки не ссылочных типов (примитивные, int, double и т. д.). Но я бы оставил это на ваше усмотрение. :-)

Создать экземпляр универсального типа в Java? - переполнение стека[^]
java-как сделать тип возвращаемого метода универсальным? - переполнение стека[^]


Mohibur Rashid

☆☆☆☆☆

Afzaal Ahmad Zeeshan

Спасибо, Мохибур Рашид.