2012-10-28 41 views
1

我不擅长Java,所以我认为我的问题是基本的。我正在为ArrayResult之类的东西写一个接口。将会有方法添加和获取。Java接口方法 - 参数和返回值类型作为孩子的号码

问题是ArrayResult可以获取整数或双精度值。所以我需要更一般地定义接口中的方法。我发现有可能有这样的get方法:

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

这是正确的吗?我相信这意味着get方法可以返回任何扩展Number对象的东西。添加方法使用的是哪个sytax?

public void add(Number value); 

这不是我想要的,因为add(整数值)不覆盖接口方法。

回答

3

我想你想要的是

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

参考文献:

+0

也许吧。我尝试了你的建议,但是当我用add(Integer)覆盖add方法时。它不起作用。它说它需要实现add(Number)。 – Macejkou

+0

@Macejkou检查更新。 –

+0

您需要创建一个实现类,用类定义中的替换。 – breezee

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

    public void add(N value); 
} 
0

只需返回Number

Number get(Integer index); 

这也将让您返回任何Number后代像IntegerDouble。在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; 

} 
+0

谢谢。我了解收藏。我有更复杂的问题,并简化了我的问题。 – Macejkou

相关问题