Given:Tại sao tôi nhận được "loại chung loại bất hợp pháp cho instanceof"?
public class C<T> {
private class D {
public boolean equals(Object o) {
if (!(o instanceof D)) // line 4
return false;
D other = (D)o; // line 6
return i == other.i;
}
int i;
}
}
tôi nhận được:
C.java:4: illegal generic type for instanceof
if (!(o instanceof D))
^
Tôi cũng nhận được một "diễn viên không được kiểm soát" cảnh báo về dòng 6. Tại sao? o
là không phải loại chung - nó chỉ là một đồng bằng Object
. Làm thế nào tôi có thể triển khai chính xác equals()
bằng cách kiểm tra và truyền tới một phiên bản D
?
Lưu ý: Rõ ràng, ví dụ mã này là phiên bản được cắt xuống của mã thực tế của tôi. Các lớp thực tế cho C
và D
lớn hơn nhiều và D
là một lớp bên trong lớp C
được sử dụng bởi việc triển khai.
FYI: D
thực sự sử dụng thông số chung T
.
bạn đã thử * instanceof C.D * thay vì * instanceof D *? –
Tôi sẽ lưu ý rằng ví dụ được cho là * bị hỏng. –
@Evan: Nó hoạt động. Nhưng tại sao trình độ chuyên môn lại cần thiết? –