Власне, ти можеш робити те, що хочеш. Якщо ви хочете надати декілька інтерфейсів або інтерфейси класу плюс, ви повинні мати ваш підказчик виглядати приблизно так:
<T extends ClassA & InterfaceB>
Дивіться підручник з генерики на сайті sun.com, зокрема в розділі Параметри обмеженого типу , внизу сторінки. Насправді ви можете перелічити більше одного інтерфейсу, якщо бажаєте, використовуючи & InterfaceName
для кожного потрібний вам.
Це може бути довільно складним. Для демонстрації див. Декларацію JavaDoc Collections#max
, яка (загорнута на два рядки):
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
чому так складно? Як сказано в FAQ Generics FAQ: Для збереження бінарної сумісності .
Схоже, це не працює для змінної декларації, але вона працює, коли ставить загальний кордон класу. Таким чином, щоб робити те, що ви хочете, можливо, вам доведеться перестрибнути через кілька обручів. Але ти можеш це зробити. Ви можете зробити щось подібне, поставивши загальний кордон на своєму класі, а потім:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
щоб отримати, variable
що має обмеження, яке ви хочете. Для отримання додаткової інформації та прикладів, перегляньте сторінку 3 Generics в Java 5.0 . Зверніть увагу, що <T extends B & C>
вперше ім'я класу повинно бути першим, а інтерфейси слідувати. І звичайно, ви можете перелічити лише один клас.