Đây là loại khó giải thích, nhưng tôi đã nhìn khắp mọi nơi, và tôi không thể tìm thấy bất kỳ câu trả lời hay nào.Làm cách nào để tôi có thể tham khảo loại của lớp hiện tại?
Tôi cũng đã nhìn thấy câu hỏi tràn stack How can I refer to the class type a interface is implementing in Java? và How do I return an instance of an object of the same type as the class passed in using Java 6?, nhưng họ không thể trả lời câu hỏi của tôi. Có một ngoại lệ khi tôi áp dụng thừa kế.
Có một ví dụ, để làm cho nó dễ dàng hơn để hiểu:
Hãy nói rằng tôi có một số giao diện được gọi SelfMaker:
public interface SelfMaker <SELF>{
public SELF getSelf();
}
Và A có một con chó, mà có thể sinh sản với những con chó khác. Vì vậy, con chó là một "SelfMaker", như thế này:
public class Dog implements SelfMaker<Dog> {
String color;
public String toString() {
return "some " + color + " dog";
}
public Dog procreate(Dog anotherDog) {
Dog son = getSelf();
son.color = color;
return son;
}
@Override
public Dog getSelf() {
return new Dog();
}
}
Nhưng sau đó, tôi có một DomesticDog, một con chó, nhưng nó có một gia đình đáng yêu tên ông. Như thế này:
public class DomesticDog extends Dog {
private String name;
public String toString() {
return super.toString() + " named " + name;
}
}
Bây giờ, tôi có một số lớp xử lý cặp vợ chồng "SelfMaker", hãy gọi lớp này là "Couple". Như thế này:
public class Couple<T extends SelfMaker<T>> {
private T first;
private T second;
public String toString() {
return first.toString() + " and " + second.toString();
}
}
THE EXCEPTION:
Ngoại lệ đến khi tôi muốn tạo ra một vài DomesticDog
s. Như thế này:
public class CoupleOfDomesticDogs extends Couple<DomesticDog>{
public DomesticDog procreate(){
DomesticDog son = first.procreate(second);
return son;
}
}
này sẽ ném một ngoại lệ trên <DomesticDog>
than phiền: Bound mismatch: The type DomesticDog is not a valid substitute for the bounded parameter <T extends SelfMaker<T>> of the type Couple<T>
Tôi đã cố gắng để thay đổi biến khái quát hóa từ lớp Couple này: Couple<T extends SelfMaker<?>>
nhưng "con trai" sẽ không phải là một DomesticDog (và tôi muốn "con trai" trở thành một người nội trợ). Nếu tôi thêm một số diễn viên, sau đó nó sẽ biên dịch, nhưng nó sẽ ít dễ đọc hơn.
Vì vậy, ... đây là câu hỏi: Có cách nào để đạt được điều này mà không cần đúc và tổng quát?
liên quan: [Có cách nào để tham khảo các loại hiện tại với một loại biến?] (Http://stackoverflow.com/ câu hỏi/7354740/là-có-một-cách-để-tham-to-hiện-loại-với-một-kiểu-biến) –
Lớp của lớp hiện tại là this.getClass(). Tên lớp là this.getClass(). GetName(). Đó là tốt như nó được. Và không có cách nào để tự động chỉ định một diễn viên trong Java. –