gpt4 book ai didi

java - 创建新的有界类型参数

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

我正在寻求实现一个通用搜索功能,主要是查看鼠标单击是否在多个矩形列表之一内(不同类型,G3_gRect 的所有子级)。当没有找到任何内容时,它应该返回一个 T 类型的新对象,并带有一个将其定义为无效的属性(而不是其他可能的内容)。

这一切都工作正常,直到我尝试让它返回泛型类型 T。我可以采取哪些不同的措施来实现这项工作?

当尝试初始化类型 T 的新对象时,这会在最后一行中断。我认为是因为它不知道它始终可以初始化该类型。

    private <T extends G3_gRect> T whatRect(MouseEvent e, List<List<T>> maps) {
while (!maps.isEmpty()) {
List<T> map = maps.remove(0);

for (T entry : map) {
if(entry.R.contains(e.getPoint())) return entry;
}
}
return new T(G2_gObj.ObjType.NONE); //return with empty object rather than null.
}

相关类的一些相关部分:

public abstract class G2_gObj {

public enum ObjType {
FUNCTION, RIBBON, D_LINE, D_START, D_END, D_IN_AREA, C_IN_AREA, M_IN_AREA, D_OUT_AREA, M_OUT_AREA, NONE, C_OUT_AREA
}

public ObjType t;

public G2_gObj(ObjType t) {
this.t = t;
}
}

public class G3_gRect extends G2_gObj{
public G3_gRect(ObjType t) {
super(t);
}
}

public class G4_gFunct extends G3_gRect{
public G4_gFunct(ObjType t) {
super(t);
}
}

public class G4_gDPoint extends G3_gRect{
public G4_gFunct(ObjType t) {
super(t);
}
}

现在我的解决方法是将类型 T 的对象传递到此方法中,如果没有找到任何内容则返回。它有效,很好,但我想有更好的方法来真正实现这项工作。

谢谢!

最佳答案

如果不知道对象的确切类,就无法构造它。除非使用反射,您唯一的选择是让调用者传递默认值,或者返回 null (这将避免不必要的对象创建)。

如果你确实想使用反射(一个有问题的决定),你可以有一个参数 Class<T> clazz ,然后返回

clazz.getConstructor(ObjType.class).newInstance(G2_gObj.ObjType.NONE)

关于java - 创建新的有界类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077041/

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