Java静态方法,通配符/泛型返回类型
我正在构建一个API,它使用抽象类来调用静态方法。一些Java伪代码:Java静态方法,通配符/泛型返回类型,java,generics,functional-java,Java,Generics,Functional Java,我正在构建一个API,它使用抽象类来调用静态方法。一些Java伪代码: public abstract class APIBaseClass { public static List<?> myMethod(Class<?> clazz, MyConverter converter, List<Object> objects) { return objects.stream() .map(objec
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
按预期编译。而且,invokingMethod
由于不兼容的类型而无法编译,这也是意料之中的:
Required: List<blah.blah.blah.MyClassType>
Found: List<capture<?>>
必需:列表
发现:列出你的类是抽象的这一事实是完全不相关的。如果您将它们抽象化以防止实例化,并使用继承来避免必须指定类名,那么这就是反模式,它不会像预期的那样将抽象类用于多态性。只需向类添加一个私有构造函数,并使用静态导入
现在,关于问题本身,您需要将方法设置为泛型,并将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());
}
公共静态列表myMethod(类clazz、MyConverter转换器、列表对象){
返回objects.stream()
.map(对象->转换器.convertObjectToType(对象,clazz))
.collect(Collectors.toList());
}
类是抽象的这一事实与此完全无关。如果您将它们抽象化以防止实例化,并使用继承来避免必须指定类名,那么这就是反模式,它不会像预期的那样将抽象类用于多态性。只需向类添加一个私有构造函数,并使用静态导入
现在,关于问题本身,您需要将方法设置为泛型,并将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());
}
公共静态列表myMethod(类clazz、MyConverter转换器、列表对象){
返回objects.stream()
.map(对象->转换器.convertObjectToType(对象,clazz))
.collect(Collectors.toList());
}
myMethod(MyClassType.class,objectsList)
与myMethod(class clazz,MyConverter converter,List objects)
不一样吗?你是说对象
而不是objectsList
?@tsolakp,是的。是的。谢谢。myMethod(MyClassType.class,objectsList)
与myMethod(class clazz,MyConverter converter,List objects)
不一样吗?你是说对象
而不是objectsList
?@tsolakp,是的。是的。谢谢。它们是抽象的,以避免实例化,是的。但是,我明白你的观点,它展示了一个反模式。谢谢你指出这一点。泛型需要实例化一个类,对吗?这就是你建议私人建造商的原因吗?或者,这是为了更正反模式吗?否。方法可以是泛型的,包括静态方法:。顺便说一句,您在代码中使用的Collectors.toList()就是这样一种静态泛型方法。私有构造函数与泛型无关:它允许阻止类的实例化。谢谢。我不得不坐着听你的回答几分钟才能理解它。你说得对。谢谢你的回答和解释。在静态
和列表
之间的
是让我挂断电话的原因。是的,它们是抽象的,以避免实例化。但是,我明白你的观点,它展示了一个反模式。谢谢你指出这一点。泛型需要实例化一个类,对吗?这就是你建议私人建造商的原因吗?或者,这是为了更正反模式吗?否。方法可以是泛型的,包括静态方法:。顺便说一句,您在代码中使用的Collectors.toList()就是这样一种静态泛型方法。私有构造函数与泛型无关:它允许阻止类的实例化。谢谢。我不得不坐着听你的回答几分钟才能理解它。你说得对。谢谢你的回答和解释。在静态
和列表
之间的
是让我挂断电话的原因。