假设我有一个我想要添加属性的类。此属性的值应实现某个接口。但是,我不关心它是什么类型的对象/类,只要它从某个接口实现方法。
有没有办法实现这种行为?
在Objective-C中,我会这样做:
@property (nonatomic, strong) id <MyInterface> attr;
答案 0 :(得分:1)
将类中的字段声明为接口的类型:
public class YourClass {
private MyInterface attr;
}
对象引用所属的类不重要,只有该类实现了所需的接口才有意义。这是一个例子:
public class MyClass {
private List<String> stringList;
public void setStringList(List<String> stringList) {
this.stringList = stringList;
}
}
//...
MyClass myClass = new MyClass();
myClass.setStringList(new ArrayList<String>());
myClass.setStringList(new LinkedList<String>());
来自你的评论:
我不认为Interfaces是类型。更像是一个对象的特征。
在Java中,接口是一种类型。如果您希望某些类型同时声明两个接口,您可以创建一个从两者扩展的第三个接口:
interface ThirdPartyInterface1 {
}
interface ThirdPartyInterface2 {
}
interface MyInterface extends ThirdPartyInterface1, ThirdPartyInterface2 {
}
public class YourClass {
private MyInterface attr;
}