接口方法应该返回什么类型

时间:2012-11-05 10:50:10

标签: java

我有两节课。 Status1Status2

这两个状态有一个共同变量:

protected A a;

和一个不常见的:

class Status1 {
    protected A a;
    protected ListStatus1.B version;
}

Bstatic class

Status1
class Status2 {
    protected A a;
    protected Status2.C version;
}

Cstatic class

Status2

现在我想创建界面Status

我可以添加variable A。现在我需要添加方法getVersion,它应该返回Status1 / Status2

中的静态类
protected abstract ?? getVersion();

但我不知道return type应该在哪里

我尝试添加到此接口静态类并且此类返回但没有成功

4 个答案:

答案 0 :(得分:2)

“正确的方法”是让两个静态类B和C实现一个公共空interface,让我们调用“Versioned”

public interface Versioned{}

static class B implements Versioned{
...
}
static class C implements Versioned{
...
}

之后,你可以写:

 protected abstract Versioned getVersion();

并且您的方法将被允许返回B或C.

答案 1 :(得分:1)

我认为Object可以做到这一点!

但是,在访问对象的任何字段时,您可能会遇到问题。因此,我建议你有一个接口Version,它由两个状态的内部类实现。

希望这有帮助,

干杯

答案 2 :(得分:1)

如果Status1.BStatus2.C之间的差异对您的对象模型至关重要,则可以Status通用:

public interface Status<V> {
    public V getVersion();
}

public class Status1 implements Status<Status1.B> {
    public Status1.B getVersion() { ... }
    ...
}

否则,您可以根据其他答案的建议为两个版本类引入接口。

答案 3 :(得分:0)

一种方法是创建一个接口(让我们称之为IVersion)并使两个版本类都实现该接口。然后getVersion()方法可以返回此接口:

protected abstract IVersion getVersion();