【发布时间】:2021-07-09 05:19:00
【问题描述】:
通用性较弱,请放轻松!
我有一些通过泛型构造如下的基类和派生类
public abstract class ProcessingNode<T extends APICommand> extends Node {
}
public class CustomerProcessingNode extends ProcessingNode<CHDAPICommand> {
}
public class MerchantProcessingNode extends ProcessingNode<MHDAPICommand> {
}
public class APICommand {
}
public class CHDAPICommand extends APICommand {
}
public class MHDAPICommand extends APICommand {
}
现在,在服务器启动期间,我想选择正确的 ProcessingNode 并将其缓存如下:
private void cacheProcessingNodeManager() throws ListenerException {
// throws Unexpected Bound error
ProcessingNode<T extends APICommand> processingNodeManager = null;
if (condition1 is true){
// throws "required ProcessingNode<T> but found CustomerProcessingNode"
processingNodeManager = new CustomerProcessingNode();
}
else if (condition2 is true){
// throws "required ProcessingNode<T> but found MerchantProcessingNode"
processingNodeManager = new MerchantProcessingNode();
} else {
// some exception
}
// cache processingNodeManager
}
但我得到了 2 个错误,如上面 cmets 中突出显示的那样。
创建ProcessingNode 的特定对象的正确方法是什么?
【问题讨论】:
-
在您的方法
cacheProcessingNodeManager的上下文中,T是什么?您不能在方法内部动态决定T必须是CHDAPICommand或MHDAPICommand;它必须在编译时知道。 -
声明
ProcessingNode<T extends APICommand> processingNodeManager = null;不正确。你的意思是ProcessingNode<? extends APICommand> processingNodeManager = null;? -
@ernest_k yup...这就解决了!!
-
@Jesper aahhh....超级愚蠢的菜鸟,
<?>是我应该做的,而不是<T>。
标签: java generics inheritance instantiation