假设我有以下课程:
import java.util.function.Function
import java.util.List
class Foo<X, Y> {
public Function<X, Y> converter;
public List<X> inputs;
public Foo(Function<X, Y> converter, List<X> inputs) {
this.converter = converter;
this.inputs = inputs;
}
}
我想添加一个构造函数,它需要一个List
public Foo(List<X> inputs) {
this(Function.identity(), inputs);
}
但是,这给了我一个错误:
构造函数Foo
public static <X> Foo<X, X> makeFoo(List<X> inputs) {
return new Foo<>(Function.identity(), inputs);
}
事实上,以下方法也有效:
public Foo(List<X> inputs) {
this.converter = (Function<X, Y>)Function.identity();
this.inputs = inputs;
}
然而,在这里,我必须对
函数进行未经检查的强制转换
有没有办法让构造器使用这种方法而不是诉诸静态方法或强制转换?
我试着用
这个((函数)调用另一个构造函数
似乎应该有一种方法让编译器知道
函数。identity()
参数或创建的Foo
类型为
谢谢你的帮助。
不,没有更好的办法了。您不能限制此构造函数仅在X
和Y
是相同类型时工作,因此构造函数必须假设它们是不同的,并且相应地Function.identity()
不一定是正确的类型。
也就是说,使用静态工厂方法通常比公开构造函数更好,如果你这样做了,你就没事了。
问题内容: 如果我有一个像这样的抽象类: 还有一些从Item派生的类是这样的: 我不明白为什么我不能使用泛型调用构造函数: 我知道可以有一个没有构造函数的类型,但是这种情况是不可能的,因为Pencil具有没有参数的构造函数,而Item是抽象的。但是我从eclipse中得到了这个错误: 无法实例化 我不明白为什么的 T类型 ,以及如何避免这种情况? 问题答案: 无法使用Java类型系统来强制类层次结
问题内容: 我想创建一个KeyValue类,但以通用方式,这就是我写的内容: 错误显示:“令牌“>上的语法错误”,此令牌后应有标识符” 那我该如何在Java中创建一个通用构造函数呢? 问题答案: 您需要从构造函数的签名中删除:它已经隐式存在。
我正在初始化的代码: 如何根据 类型在我的 函数中启动 ? ps-getForObject是spring restTemplate的标准函数-http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#getForObject-java.lang.Str
我正在做作业,所以我只想修复我的编译错误,这样我就可以继续工作了。我需要创建一个PointList类,在ArrayList中保存一个Point对象列表。PointList类应该接受任何作为Point类实例或Point子类的对象。 我不断收到一个编译器错误,上面写着 我真的不明白我错过了什么,我已经通读了这本书,似乎不明白为什么我会得到这个错误。我已经制作了 Point 类并完成了测试,但似乎无法编
问题内容: 是否可以为特殊/构造的泛型类型扩展泛型类?我想使用一种方法来扩展Int Arrays,以计算其元素的总和。 例如 问题答案: Swift 5.x:
null 我不太确定如何处理我的代码,以下是我得到的: 我只是不知道我应该打什么。我相信我已经完成了第一个重载构造函数,但我对此还是新手。 那么,我应该做些什么来使重载构造函数工作呢? 我对Java和面向对象编程非常陌生。