简体   繁体   English

Java接口方法-参数和返回值类型为Number的子代

[英]Java interface method - parameter and return value type as child of Number

I am not very skilled in Java so I consider my question as basic. 我不太熟练Java,所以我认为我的问题很基本。 I am writing an interface for something like ArrayResult. 我正在为ArrayResult之类的编写接口。 There will be methods add and get. 将有添加和获取的方法。

Problem is that ArrayResult can obtain values of Integer or Double. 问题是ArrayResult可以获取Integer或Double的值。 So I need to define methods in interface more generally. 因此,我需要更一般地在接口中定义方法。 I figured out that it is possible to have something like this for get method: 我发现可以为get方法添加如下内容:

public <N extends Number> N get(Integer index);

Is that correct? 那是对的吗? I believe this means that get method can return anything what extends Number Object. 我相信这意味着get方法可以返回扩展Number Object的任何内容。 What sytax to use for add method? add方法使用什么语法?

public void add(Number value);

This is not what I want since add(Integer value) doesnt override the interface method. 这不是我想要的,因为add(Integer value)不会覆盖接口方法。

I guess what you want is 我想你想要的是

interface ArrayResult<N extends Number> {
    public N get(Integer index);

    public void add(N value);
}

Then you can write two separate specific implementers 然后,您可以编写两个单独的特定实现者

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;
    }
}

References: 参考文献:

interface ArrayResult<N extends Number> {
    public N get(Integer index);

    public void add(N value);
}

Just return Number . 只需返回Number

Number get(Integer index);

This will also allow you to return any Number descendants like Integer and Double . 这也将允许您返回任何Number后代,例如IntegerDouble In Java parent type can hold any descendant type. 在Java中,父类型可以包含任何后代类型。

Also use integral type int in getter argument. 还要在getter参数中使用整型int

Number get(int index)

Also you can use predefined class like Vector<Number> with required functionality. 您也可以使用具有所需功能的预定义类,例如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM