[英]Java Static Method, Wildcard / Generic Return Type
我正在构建一个使用抽象类的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
将按预期myMethod
编译。 而且,由于类型不兼容, invokingMethod
也无法按预期进行编译:
Required: List<blah.blah.blah.MyClassType>
Found: List<capture<?>>
如果我:(1)invokingMethod上的@SuppressWarnings(“ unchecked”),并且(2) invokingMethod
将myMethod
的结果MyClassType
为MyClassType
的列表,则它可以编译而没有错误或警告,即List<MyClassType> list = (List<MyClassType>) myMethod(MyClassType.class, converter, objects);
。 但是,没有透明度对于使用API的任何人都是必要的,这感觉并不理想。
我的myMethod
在将其调用的类型的列表返回给invokingMethod
,我有什么选择,同时保留我的抽象类和静态方法,同时理想地提高invokingMethod
可用性?
欢迎任何建议或替代想法。
提前致谢。
您的类是抽象的事实是完全不相关的。 如果将它们抽象化以防止其实例化,并使用继承避免指定类名,则这是一种反模式,它不打算将抽象类用于多态性,因为它们打算被使用。 只需在类中添加一个私有构造函数,然后使用静态导入即可。
现在,关于问题本身,您需要使方法通用,并使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());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.