Hãy tưởng tượng lớp này:Generic constructor (Lớp <T> clazz) không hỗ trợ T trong đó T là một Generics
public class ObjectCreator<T> {
private Class<T> persistentClass;
public ObjectCreator(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
public T create() {
T instance = null;
try {
instance = persistentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}
Bây giờ tôi sublclass nó với một đối tượng tên miền:
public class PersonCreator extends ObjectCreator<Person>{
/**
* @param persistentClass
*/
public PersonCreator() {
super(Person.class);
}
}
Tất cả các công trình lớn. .. Nhưng nếu tôi cố gắng phân lớp nó với một đối tượng miền chung chung khác, trình biên dịch sẽ phàn nàn:
public class MessageCreator extends ObjectCreator<Message<String>>{
/**
* @param persistentClass
*/
public MessageCreator() {
super(Message.class);
}
}
Các constructor
ObjectCreator<Message<String>>(Class<Message>)
là undefined MessageCreator.java
Tôi nghĩ rằng đây là một hạn chế lớn: tại sao điều này là cấm?
Bất kỳ ý tưởng nào về cách làm việc xung quanh?
Massimo
Trừ khi 'Message' là' final' hoặc có một hàm tạo mặc định không thể truy cập được. –
@PaulBellora có, đây là giới hạn được biết đến của phương pháp này. Tuy nhiên tôi không thấy bất kỳ giải pháp nào khác sẽ biên dịch mà không cần cảnh báo. –
Đó là giải pháp tốt nhất mà tôi nghĩ. Một câu hỏi: đó là sự khác biệt giữa Thông báo mới() và Thư mới () {}? –