2012-04-22 65 views
7
public <T extends java.util.EventListener> T[] getListeners(final Class<T> listenerClass) { 
    ... 
} 

Ký hiệu tương tự C# generics của các generics java ở trên là gì?C# generics & not insane

Trình nghe thông sốClass sẽ là loại & không phải là đối tượng. Nhưng đối tượng T phải thuộc về một hierachy cụ thể.

+0

'Class ' có nghĩa là gì? – Gabe

+0

Vì vậy, trong java: tôi vượt qua MyListener.class .. where MyListener là tên lớp .. phương pháp wont cho phép các đối tượng như params – pulancheck1988

+0

Đó là chỉ để có thể tìm hiểu những gì 'T' là? Nếu vậy, điều đó không cần thiết trong C# vì 'T' có sẵn bên trong phương thức. – Gabe

Trả lời

13
public T[] GetListeners<T>() where T : EventListener 
{ 
} 
+0

những gì đã xảy ra với param ?? tôi vượt qua lớp (loại) phương thức trả về mảng của đối tượng thuộc loại đó – pulancheck1988

+3

Giả sử kiểu trả về là một mảng của kiểu MyListener. Bạn sẽ gọi phương thức như sau: MyListener [] mylisteners = GetListeners (); –

+3

@ pulancheck1988: Không giống như trong Java, trong C#, đối số chung được hợp nhất và có thể truy cập được. Vì vậy, trong khi 'T.class' là bất hợp pháp trong Java, C# tương đương' typeof (T) 'là hoàn toàn hợp pháp và sẽ trả về cho bạn một đối tượng' Type' tương ứng với kiểu 'T'. Thành ngữ Java của việc truyền xung quanh các đối tượng 'Class ' chỉ là một giải pháp cho một giới hạn của việc thực hiện Generics của Java; vì C# không có cùng giới hạn, các thành ngữ khác nhau. –