gpt4 book ai didi

Java 静态方法、通配符/通用返回类型

转载 作者:行者123 更新时间:2023-12-02 01:51:09 24 4
gpt4 key购买 nike

我正在构建一个 API,它使用抽象类来调用静态方法。一些 Java 伪代码:

public abstract class APIBaseClass {

public static List<?> myMethod(Class<?> clazz, MyConverter converter, List<Object> objects) {
return objects.stream()
.map(object -> converter.convertObjectToType(object, clazz))
.collect(Collectors.toList());
}

}

而且,哪里myMethod被调用:

public abstract class MyAPIClass extends APIBaseClass {

public static List<MyClassType> invokingMethod(MyConverter converter, List<Object> objects) {
List<MyClassType> list = myMethod(MyClassType.class, converter, objects);
...
return list;
}
}

myMethod编译,如预期。并且,invokingMethod由于类型不兼容,也未按预期编译:

Required: List<blah.blah.blah.MyClassType>
Found: List<capture<?>>

如果我执行以下操作,则编译时不会出现错误或警告:(1) @SuppressWarnings("unchecked") on invokingMethod ,并且 (2) 转换 myMethod 的结果到 MyClassType 的列表,调用时,即 List<MyClassType> list = (List<MyClassType>) myMethod(MyClassType.class, converter, objects); 。然而,没有任何透明度表明这对于使用 API 的任何人来说都是必要的,这感觉不太理想。

我对myMethod有什么选择将调用它的类型的列表返回到 invokingMethod ,同时维护我的抽象类和静态方法,同时理想地提高 invokingMethod 内的可用性?

欢迎任何建议或替代想法。

提前致谢。

最佳答案

您的类是抽象的这一事实完全无关紧要。如果将它们抽象化以防止实例化,并使用继承来避免指定类名,那么这就是一种反模式,它不会像预期的那样使用抽象类来实现多态性。只需向类添加一个私有(private)构造函数,并使用静态导入即可。

现在,关于问题本身,您需要使方法通用,并且 MyConverter.convertObjectToType() 方法也通用:

public static <T> List<T> myMethod(Class<T> clazz, MyConverter converter, List<Object> objects) {
return objects.stream()
.map(object -> converter.convertObjectToType(object, clazz))
.collect(Collectors.toList());
}

关于Java 静态方法、通配符/通用返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52978658/

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