2017-01-24 20 views
6

tôi đi qua với sau:Generics Loại paramenter phụ thuộc vào bản thân

Tôi hiểu điều này:

Trong phần tham số kiểu của một lớp, một loại biến T trực tiếp phụ thuộc vào một biến kiểu S nếu S là liên kết của T, trong khi T phụ thuộc vào S nếu T trực tiếp phụ thuộc vào S hoặc T trực tiếp phụ thuộc vào biến kiểu U phụ thuộc vào S (sử dụng định nghĩa đệ quy).

Nhưng

Đó là một lỗi thời gian biên dịch nếu một loại biến trong phần tham số kiểu của một lớp phụ thuộc vào bản thân.

có nghĩa là gì? Reference

+0

này không được phép ** T kéo dài T * *? – Eugene

+0

@Eugene Yup. Đó là câu trả lời của tôi. Tôi đoán bạn đã bỏ lỡ nó :) – CKing

Trả lời

6

Ý nghĩa của câu lệnh là biến tham số kiểu không thể phụ thuộc vào chính nó. Các mã sau đây không được phép:

class Generic<T extends T> { 

} 

Đây T là một biến kiểu tham số và nó không thể phụ thuộc vào bản thân (trực tiếp hoặc inderictly). Mặt khác, các mã sau đây được phép:

public class GenericRecursive<T extends GenericRecursive<T>> { 

} 
+0

Cũng như xa như tôi biết như là một tham số kiểu là supertype và subtype của chính nó. Tôi có thể sai – optional

+1

@CKing Tôi đã bỏ lỡ nó. 1+ – Eugene

+1

@Mukeshkumarsaini Bất kể đó có phải là một kiểu con của chính nó hay không, câu lệnh 'T mở rộng T' là gì vì chúng ta biết rằng tất cả các đối tượng sẽ luôn vượt qua thử nghiệm * IS-A * với chính chúng. – CKing

2

Đó là một lỗi thời gian biên dịch nếu một loại biến trong phần tham số kiểu của một lớp phụ thuộc vào bản thân.

Thông số không thể xuất phát từ chính nó.

Ví dụ nó không phải là quy phạm pháp luật:

class YourClass<S extends S> { 
} 

Nhưng có lẽ bạn sẽ không sử dụng này vì nó làm cho không có thực sự có ý nghĩa.

Bạn có thể làm điều đó ví dụ:

class YourClass<T extends S, S extends T> { 
} 

Và nó sẽ không biên dịch quá vì T phụ thuộc vào S mà phụ thuộc vào bản thân (chu kỳ)

+0

'lớp YourClass ' ??. Ngoài ra, phần cụ thể nói về các biến tham số kiểu tùy thuộc vào chính chúng và không phụ thuộc vào các tham số kiểu khác. – CKing

+0

@CKing Nếu tham số phụ thuộc vào thứ gì đó phụ thuộc vào tham số.Cuối cùng nó có ý nghĩa gì? Nó có nghĩa là tham số phụ thuộc vào chính nó. Đó là nguyên tắc chu kỳ – davidxxx

+0

Đủ công bằng; tuy nhiên, tất cả đều có thể chạm vào thông số kiểu tùy thuộc vào chính nó (trực tiếp hoặc gián tiếp) – CKing

Các vấn đề liên quan