我有两节课。 Status1
和Status2
这两个状态有一个共同变量:
protected A a;
和一个不常见的:
class Status1 {
protected A a;
protected ListStatus1.B version;
}
B
在static class
类
Status1
class Status2 {
protected A a;
protected Status2.C version;
}
C
在static class
类
Status2
现在我想创建界面Status
我可以添加variable A
。现在我需要添加方法getVersion
,它应该返回Status1 / Status2
protected abstract ?? getVersion();
但我不知道return type
应该在哪里
我尝试添加到此接口静态类并且此类返回但没有成功
答案 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.B
和Status2.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();