![](/img/trans.png)
[英]Getting the class of a Java generic, and interface implementation of generics
[英]Java Generics - Best way to use generic interface and its implementation
我有一個接口 MessageHandler,它采用泛型類型 T 和一個在具體類型 CustomObject 上操作的實現 MessageHandlerImpl。 然后我在另一個客戶端類中使用它,如下所示:
public interface MessageHandler<T> {
void validate(T t);
void process(T t);
default void handle(T t) {
validate(t);
process(t);
}
}
public class MessageHandlerImpl implements MessageHandler<CustomObject> {
@Override
public void validate(CustomObject message) {}
@Override
public void process(CustomObject message) {}
}
public class AnotherClientClass {
//option - 1
MessageHandlerImpl handler = new MessageHandlerImpl();
//option - 2
MessageHandler<CustomObject> handler = new MessageHandlerImpl();
public void getMessage() {
String messageStr = getMessageFromAnotherMethd();
CustomObject messageObj = convertToCustomObject(messageStr);
handler.handle(messageObj);
}
}
我在這里有幾個問題:
泛型在這里無關緊要。 通常使用與選擇適當的聲明變量類型相同的准則。
更廣泛地說,通過調用new
,你的設計很糟糕。 相反,使handler
成為構造函數參數。 在這種情況下,一定要使用超類型MessageHandler<CustomObject>
(或者,甚至更好, MessageHandler<? super CustomObject>
甚至Consumer<? super CustomObject>
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.