Trên thực tế, bạn có thể làm những gì bạn muốn. Nếu bạn muốn cung cấp nhiều giao diện hoặc một lớp cộng với giao diện, bạn phải có ký tự đại diện của mình trông giống như thế này:
<T extends ClassA & InterfaceB>
Xem Hướng dẫn Generics tại sun.com, cụ thể là phần Tham số loại giới hạn , ở cuối trang. Bạn thực sự có thể liệt kê nhiều giao diện nếu bạn muốn, sử dụng & InterfaceName
cho từng giao diện mà bạn cần.
Điều này có thể nhận được phức tạp tùy ý. Để chứng minh, hãy xem khai báo JavaDoc của Collections#max
(được gói trên hai dòng) là:
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
sao phức tạp vậy Như đã nói trong Câu hỏi thường gặp về Java Generics: Để duy trì khả năng tương thích nhị phân .
Có vẻ như điều này không hoạt động để khai báo biến, nhưng nó hoạt động khi đặt một ranh giới chung trên một lớp. Vì vậy, để làm những gì bạn muốn, bạn có thể phải nhảy qua một vài vòng. Nhưng bạn có thể làm điều đó. Bạn có thể làm một cái gì đó như thế này, đặt một ranh giới chung cho lớp của bạn và sau đó:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
để có được variable
điều đó có những hạn chế mà bạn muốn. Để biết thêm thông tin và ví dụ, hãy xem trang 3 của Generics trong Java 5.0 . Lưu ý, trong <T extends B & C>
, tên lớp phải đến trước và giao diện theo sau. Và tất nhiên bạn chỉ có thể liệt kê một lớp duy nhất.