Java 创建新的有界类型参数

Java 创建新的有界类型参数,java,bounded-types,Java,Bounded Types,我希望实现一个通用的搜索功能,基本上看一下鼠标点击是否在几个矩形列表中的一个(不同类型,所有G3_gRect的子对象)。当找不到任何内容时,它应该返回一个类型为T的新对象,并使用一个属性将其定义为无效(与其他可能的内容相反) 在我尝试让它返回泛型类型T之前,这一切都可以正常工作。 我可以采取哪些不同的措施来实现这一目标 当试图初始化一个类型为T的新对象时,这会在最后一行中断。我假设它不知道它总是可以初始化该类型 private <T extends G3_gRect> T w

我希望实现一个通用的搜索功能,基本上看一下鼠标点击是否在几个矩形列表中的一个(不同类型,所有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.
    }
现在我的解决方法是将一个类型为T的对象传递到这个方法中,如果没有找到任何东西,则返回。这是可行的,很好,但我想有更好的方法来实现这一点


谢谢

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

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

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