![](/img/trans.png)
[英]Java - Overriding return type of extended interface when return type uses generics for own method parameter types
[英]Java interface method - parameter and return value type as child of Number
我不太熟练Java,所以我认为我的问题很基本。 我正在为ArrayResult之类的编写接口。 将有添加和获取的方法。
问题是ArrayResult可以获取Integer或Double的值。 因此,我需要更一般地在接口中定义方法。 我发现可以为get方法添加如下内容:
public <N extends Number> N get(Integer index);
那是对的吗? 我相信这意味着get方法可以返回扩展Number Object的任何内容。 add方法使用什么语法?
public void add(Number value);
这不是我想要的,因为add(Integer value)不会覆盖接口方法。
我想你想要的是
interface ArrayResult<N extends Number> {
public N get(Integer index);
public void add(N value);
}
然后,您可以编写两个单独的特定实现者
class IntegerResult implements ArrayResult<Integer> {
@Override
public void add(Integer value) {
}
@Override
public Integer get(Integer index) {
return null;
}
}
class DoubleResult implements ArrayResult<Double> {
@Override
public void add(Integer value) {
}
@Override
public Double get(Double index) {
return null;
}
}
参考文献:
interface ArrayResult<N extends Number> {
public N get(Integer index);
public void add(N value);
}
只需返回Number
。
Number get(Integer index);
这也将允许您返回任何Number
后代,例如Integer
和Double
。 在Java中,父类型可以包含任何后代类型。
还要在getter参数中使用整型int
。
Number get(int index)
您也可以使用具有所需功能的预定义类,例如Vector<Number>
。
public Vector<Number> myfunction() {
Vector<Number> ans = new Vector<Number>();
ans.add(new Integer(1));
ans.add(new Double(3.14));
return ans;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.