gpt4 book ai didi

java - 从Java中的泛型方法获取子类

转载 作者:行者123 更新时间:2023-11-30 03:54:36 25 4
gpt4 key购买 nike

我正在尝试编写一个奇怪的方法:

Map<Class, AbstractTool> ToolMap = new HashMap<Class, AbstractTool>();
//init'd correctly

@SuppressWarnings("unchecked")
public <T extends AbstractTool> T getTool(Class cls){
if (ToolMap.containsKey(cls)) {
return (T) ToolMap.get(cls);
}
else return null;
}

在一个奇怪的事件中,这段代码实际上做了我需要它做的事情。我的主要问题是,为了调用它,我必须进行这些大调用:

this.getTool<ToolType>(ToolType.class);

不酷。

<小时/>

有没有办法编写这个方法,使其具有以下签名?:

ToolType t = this.getTool<ToolType>();

或者这个

ToolType t = this.getTool(ToolType); // This one seems impossible without casting.

最佳答案

第一个不起作用,因为您在运行时查找类型,因此该参数消失了。如果您只需修复方法声明,第二个就可以正常工作。 Class 是您声明为原始的参数化类型。

如果你这样做:

 Map<Class<? extends AbstractTool>, AbstractTool> ToolMap = new HashMap<Class<? extends AbstractTool>, AbstractTool>();

@SuppressWarnings("unchecked")
public <T extends AbstractTool> T getTool(Class<T> cls){
if (ToolMap.containsKey(cls)) {
return (T) ToolMap.get(cls);
}
else return null;
}

然后你可以这样做:

ToolType t = this.getTool(ToolType.class);

关于java - 从Java中的泛型方法获取子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23555573/

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