Tại sao các Generics java lại quá khó? Tôi nghĩ cuối cùng tôi đã hiểu, nhưng nhật thực cho tôi một lỗi ở dòng trong somOtherMethod dưới đây bằng cách sử dụng một trong các phương thức getOuterList bên dưới.danh sách chung đơn giản trong java
protected List<?> getOuterList() {
// blah blah
}
protected List<? extends Object> getOuterList() {
// blah blah
}
protected void someOtherMethod() {
...
getOuterList().add((MyObject)myObject); //compile error
...
}
CẬP NHẬT: ok - vì vậy tôi hiểu được những lỗi ngay bây giờ. Đó là sự thiếu hiểu biết về một phần của tôi về những gì List<?>
hoặc List<? extends SomeObject>
thực sự có nghĩa là. Trong trường hợp trước đây, tôi nghĩ nó có nghĩa là một danh sách có thể chứa bất cứ thứ gì. Trong trường hợp sau, tôi cho rằng đó là danh sách một loạt các đối tượng mở rộng SomeObject. Sự thể hiện chính xác của sự hiểu biết của tôi sẽ chỉ là List<Object>
và List<SomeObject>
(w/out the extends). Tôi nghĩ rằng việc mở rộng đã giúp tôi giải quyết một vấn đề mà họ không làm. Vì vậy, đây là nơi vấn đề thực sự của tôi nằm:
public interface DogKennel {
public List<Dog> getDogs();
}
public class GreyHoundKennel implements DogKennel {
protected List<GreyHound> greyHounds;
public List<GreyHound> getGreyHounds() {
return this.greyHounds;
}
public List<Dog> getDogs() {
// Is there no way to handle this with generics
// w/out creating a new List?
return getGreyHounds(); //compiler error
}
}
Lỗi là gì? – jjnguy