实现某个接口的Java属性

时间:2014-05-09 13:52:54

标签: java interface attributes

假设我有一个我想要添加属性的类。此属性的值应实现某个接口。但是,我不关心它是什么类型的对象/类,只要它从某个接口实现方法。

有没有办法实现这种行为?

在Objective-C中,我会这样做:

@property (nonatomic, strong) id <MyInterface> attr;

1 个答案:

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