C# generics не имеет подстановочных значений типа, потому что .NET Generics - это дженерики, поддерживаемые CLR, в то время как Java JVM не поддерживает дженерики, а только синтаксис сахар, и они преобразуются в типы объектов при составлении компилятором
Типовые подстановочные знаки представляют родительский класс общих типов в Java
public void -тест (список <object> c) {for (int i = 0; i <c.size (); i ++) {System.out.println (c.get (i)); }}// Создать список <string> list <string> strlist = new ArrayList <string> (); // Календарь предыдущий тест метода тестирования (Strlist);
Скомпилируйте вышеуказанную программу, и при тестировании (STRLIST) произойдет ошибка компиляции, что означает, что список <String> не может рассматриваться как подкласс List <Object>. В настоящее время вам нужно использовать типовый подстановочный знак, который является?
Приведенный выше список <object> может быть заменен списком <?>, А затем его можно собрать
public void test (list <?> c) {for (int i = 0; i <c.size (); i ++) {System.out.println (c.get (i)); }}Список <string> можно использовать в качестве подкласса списка <?>, Список <?> Можно использовать в качестве родительского класса любого типа списка,
Что если вы хотите быть родительским классом списка <string> вместо списка <int>? Напишите это как этот список <? расширяет строку>
В C#это тип ограничения
класс myclass <t, u> где t: класс, где u: struct {} Интерфейс imyinterface {} класс словарь <tkey, tval>, где tkey: icomparable, ienumerable, где Tval: imyinterface {public void add (tkey key, tval val) {}}Верхний предел для ограниченных общих подстановочных знаков в Java:
// Укажите, что тип t должен быть численным классом или его подклассом, и должен реализовать java.io.serializable интерфейс открытый класс Apple <T Extends Number & java.io.serializable> {}Выше приведено полное содержание сравнения и анализа общих подстановочных знаков Java и C#, представленного вам редактором. Я надеюсь, что все будут поддерживать wulin.com ~