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);
}