gpt4 book ai didi

java - 通用工厂类实例化

转载 作者:行者123 更新时间:2023-12-01 18:55:50 26 4
gpt4 key购买 nike

如果有这样的 TCP/UDP 通信工厂

public enum IoFactory {
// Singleton
INSTANCE;

public <T> Io<T> create(T type, TransportProtocol protocol) {
...
return ...;
}
}

创建Io接口(interface):

public interface Io<T> {
public void send(T msg);
public T receive();
}

但是,当我使用

创建 Io 实例时
IoFactory factory = IoFactory.INSTANCE;     
Io<TestMessage> u = factory.create(TestMessage.class, TransportProtocol.UDP);

我收到一个编译错误,指出正确的实例化应该是

Io<Class<TestMessage>> u = factory.create(TestMessage.class, TransportProtocol.UDP);

这是怎么回事?

最佳答案

create()接受T ,作为参数并返回 Io<T>作为返回值。

但是,在您的代码中,您发送 TestMessage.class作为参数。
TestMessage.class类型为Class<TestMessage> ,而不是 TestMessage 类型(它是类对象,而不是 TestMessage 类型的对象)。

因此,编译器“理解” TClass<TestMessage> ,并期望Io<Class<TestMessage>>应该是 create() 的返回类型,但您随后将其重新分配给 u - 这是 Io<TestMessage> 类型的变量- 类型错误。

关于java - 通用工厂类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com