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

3

我有两个类,Status1Status2

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

protected A a;

还有一个不常见的:

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

BStatus1类中的静态类

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

CStatus2 类内部的 static class

现在我想要创建接口 Status

在这里,我可以添加 变量 A。现在我需要添加方法 getVersion,该方法应该返回 Status1 / Status2 内部的静态类

protected abstract ?? getVersion();

但我不知道应该有什么样的返回类型

我尝试向这个接口添加静态类,但是没有成功返回这个类

4个回答

2
“正确的方法”是让两个静态类B和C实现一个共同的空接口,我们称之为“Versioned”。
public interface Versioned{}

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

之后,您可以编写以下内容:
 protected abstract Versioned getVersion();

你的方法将被允许返回B或C。


1
如果 Status1.BStatus2.C 之间的差异对于您的对象模型至关重要,您可以将 Status 设为通用类型:
public interface Status<V> {
    public V getVersion();
}

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

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

1

我认为Object应该能解决问题!

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

希望这可以帮助您,

祝好


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接