[英]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.