Java 泛型作为构造函数参数
Java generic as constructor argument
我有三个 classes,处理器用于处理不同类型的消息。此处显示的代码不起作用,我想这是因为无法保证构造函数中的处理器参数与 运行 方法中的处理器参数具有相同的类型,并且也无法保证 receiveMessage 方法 returns 与 delete() 接受的类型相同。
public class Message<T> {
private T payload;
public T get() {
return payload;
}
public void set(T payload) {
this.payload = payload;
}
}
public interface Processor<T> {
List<Message<T>> receiveMessages();
void delete(List<Message<T>> messagePayload);
}
public class ProcessorThread {
private final Processor<?> processor;
public ProcessorThread(final Processor<?> processor) {
this.processor = processor;
}
public void run() {
List<Message<?>> messages = this.processor.receiveMessages();
processor.delete(messages);
}
}
有没有一种无需键入 ProcessorThread 即可实现类型安全的方法 class?也许传递消息有效负载 class 类型左右?
您可以创建一个通用方法来捕获类型:
public void run() {
runGeneric(this.processor);
}
private static <T> void runGeneric(Processor<T> processor) {
List<Message<T>> messages = processor.receiveMessages();
processor.delete(messages);
}
我有三个 classes,处理器用于处理不同类型的消息。此处显示的代码不起作用,我想这是因为无法保证构造函数中的处理器参数与 运行 方法中的处理器参数具有相同的类型,并且也无法保证 receiveMessage 方法 returns 与 delete() 接受的类型相同。
public class Message<T> {
private T payload;
public T get() {
return payload;
}
public void set(T payload) {
this.payload = payload;
}
}
public interface Processor<T> {
List<Message<T>> receiveMessages();
void delete(List<Message<T>> messagePayload);
}
public class ProcessorThread {
private final Processor<?> processor;
public ProcessorThread(final Processor<?> processor) {
this.processor = processor;
}
public void run() {
List<Message<?>> messages = this.processor.receiveMessages();
processor.delete(messages);
}
}
有没有一种无需键入 ProcessorThread 即可实现类型安全的方法 class?也许传递消息有效负载 class 类型左右?
您可以创建一个通用方法来捕获类型:
public void run() {
runGeneric(this.processor);
}
private static <T> void runGeneric(Processor<T> processor) {
List<Message<T>> messages = processor.receiveMessages();
processor.delete(messages);
}