Trước hết, không đặt tên là Object
. Object
là lớp cơ sở ngầm của Java cho tất cả các lớp khác. Về mặt kỹ thuật, bạn có thể đặt tên cho giao diện của mình là Object
miễn là bạn không đặt nó trong gói java.lang
, nhưng điều đó sẽ gây hiểu lầm cao.
Cung cấp các loại khác nhau trở lại cho getId()
trong ObjectA
và ObjectB
, Generics sử dụng:
public interface MyObject<T> {
T getId();
String getName();
}
public class ObjectA implements MyObject<Integer> {
@Override
public Integer getId() {
return 0;
}
@Override
public String getName() {
return "A";
}
}
public class ObjectB implements MyObject<Long> {
@Override
public Long getId() {
return 0;
}
@Override
public String getName() {
return "B";
}
}
Nếu getId()
luôn trả về một số, bạn cũng có thể xác định MyObject
như MyObject<T extends Number>
. Lưu ý rằng bạn không thể sử dụng các loại gốc int
và long
với các loại thuốc generic; bạn phải sử dụng các loại đóng hộp Integer
và Long
.
Nguồn
2015-07-16 13:13:14
Cảm ơn Robin, điều đó hữu ích. Từ khóa 'Object' chỉ là ví dụ –
Chúng ta có thể cải thiện giải pháp này bằng cách thêm 'public interface MyObject' vì chúng ta mong đợi kiểu 'T' là một số. –
@ piotr.wittchen Bạn nói đúng; hãy xem đoạn cuối của câu trả lời của tôi. ;) –