Объяснение кода в Java

этим утром я столкнулся с этим кодом, и у меня нет абсолютно никакой идеи, что это означает. Кто-либо может объяснить меня, что делает их <T> представить? Например:

public class MyClass<T>
...

some bits of code then 

private Something<T> so;

private OtherThing<T> to;

private Class<T> c;

Спасибо

5
задан Jonik 27 April 2010 в 17:07
поделиться

5 ответов

Вы наткнулись на «дженерики». Они очень хорошо объяснены в этом руководстве .

Короче говоря, они позволяют указать, какой тип содержит класс хранилища, например Список или Набор . Если вы напишете Set , вы заявили, что этот набор должен содержать только String s, и получите ошибку компиляции, если вы попытаетесь поместить туда что-то еще:

Set<String> stringSet = new HashSet<String>();
stringSet.add("hello"); //ok.
stringSet.add(3);
      ^^^^^^^^^^^ //does not compile

Кроме того, еще одним полезным примером того, что могут делать дженерики, является то, что они позволяют более точно определять абстрактный класс:

public abstract class AbstClass<T extends Variable> {

Таким образом, расширяющиеся классы не должны расширять переменную , но им нужно для расширения класса, расширяющего Variable .

Соответственно, метод, который обрабатывает AbstClass , может быть определен следующим образом:

public void doThing(AbstClass<?> abstExtension) {

где ? - это подстановочный знак, означающий «все классы, которые расширяют AbstClass ] с некоторой переменной ".

13
ответ дан 18 December 2019 в 08:27
поделиться

Вы видите обобщенные шаблоны Java , которые позволяют параметризировать классы и методы другими классами. Это особенно полезно при создании контейнерных классов, поскольку избавляет вас от необходимости создавать отдельные классы для «списка целых чисел», «списка строк» ​​и т. Д. Вместо этого вы можете иметь единственный »список некоторого типа T, где T - это переменная ", а затем вы можете создать экземпляр списка для определенного типа T. Обратите внимание, что универсальные шаблоны Java не совсем то же самое, что типы шаблонов в C ++; Дженерики Java фактически используют одно и то же определение класса, но добавляют неявное приведение типов (сгенерированное компилятором) и дополнительную проверку типов. Однако разные экземпляры фактически используют один и тот же точный тип (это называется стиранием), где параметризованные типы заменяются на Object. Подробнее об этом можно прочитать по ссылке.

0
ответ дан 18 December 2019 в 08:27
поделиться

То, что вы видите здесь, называется Generics. Они были представлены в Java в версии 1.5.

Вы можете прочитать о них здесь и здесь . Надеюсь это поможет.

5
ответ дан 18 December 2019 в 08:27
поделиться

Поскольку никто еще не упомянул об этом, на сайте Анжелики Лангер есть очень подробное руководство / FAQ / руководство по дженерикам. ].

0
ответ дан 18 December 2019 в 08:27
поделиться

Представьте, что вы пишете класс List или Array. Этот класс должен содержать элементы неизвестного типа. Как вы это делаете? На этот вопрос отвечает

Generics . Те , которые вы видите, можно прочитать как какой-то тип . С помощью дженериков вы можете написать класс MyList {...} , что в данном контексте означает список, содержащий некоторый тип .

В качестве примера использования объявите список для хранения целых чисел, MyList listOfInts , или строк, MyList listOfStrings , или один класс, который вы написали сами. MyList listOfMyClass .

1
ответ дан 18 December 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: