Java Generics Подстановочные знаки с несколькими classами

Я хочу иметь объект Class, но я хочу заставить любой class, который он представляет, расширить class A и реализовать интерфейс B.

Я могу сделать:

Class 

Или:

 Class 

но я не могу обойти оба. Есть ли способ сделать это?

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

  

См. Учебник по обобщениям на сайте sun.com, в частности раздел « Ограниченные типы параметров », в нижней части страницы. Фактически вы можете перечислить несколько интерфейсов, если хотите, используя & InterfaceName для каждого, что вам нужно.

Это может быть усложнено. Чтобы продемонстрировать, см. Декларацию JavaDoc Collections#max , которая (завернутая на две строки):

 public static > T max(Collection coll) 

почему так сложно? Как указано в часто задаваемых вопросах Java Generics: для сохранения бинарной совместимости .

Похоже, что это не работает для объявления переменных, но это работает при помещении общей границы в class. Таким образом, чтобы делать то, что вы хотите, вам, возможно, придется перепрыгнуть через несколько обручей. но ты можешь сделать это. Вы можете сделать что-то вроде этого, помещая общую границу на свой class, а затем:

 class classB { } interface interfaceC { } public class MyClass { Class variable; } 

для получения variable которая имеет ограничение, которое вы хотите. Для получения дополнительной информации и примеров ознакомьтесь со страницей 3 Generics в Java 5.0 . Обратите внимание, что в имя classа должно быть первым, а интерфейсы следуют. И, конечно, вы можете только перечислить один class.

Вы не можете сделать это с параметрами типа «анонимный» (т. Е. Подстановочные знаки, которые используют ? ), Но вы можете сделать это с параметрами типа «named». Просто объявите параметр типа на уровне метода или classа.

 import java.util.List; interface A{} interface B{} public class Test> { T t; } 
Interesting Posts

Как использовать PriorityQueue?

Как я могу отображать оставшееся время работы батареи на панели задач Windows 7?

R: подсчитывать последовательные вхождения значений в одном столбце

В чем основное отличие между наследованием и polymorphismом?

Почему размер sizeof для структуры не равен сумме sizeof каждого члена?

ПРЕДУПРЕЖДЕНИЕ. Невозможно проверить rails аутентификации маркера CSRF.

Доводы за и против доступа к данным (MS Access front end с SQL Server Backend)

Когда я должен размещать свои объекты в .NET?

Как изменить разрешения для всех файлов в каталоге и при добавлении новых файлов к значениям по умолчанию?

Может ли UEFI настроить новые ноутбуки?

Как читать значения из чисел, написанных как слова?

Преобразование матрицы в одномерный массив

Обновление ОЗУ, какие варианты подходят?

Какие приложения предназначены для чтения и записи моего жесткого диска за определенный период? Приложение для статистики (в Windows)?

Замораживание компьютера во время просмотра Flash-видео из сети

Давайте будем гением компьютера.