2014-05-09 6 views
0

Скажем, у меня есть класс, к которому я хочу добавить атрибут. Значение этого свойства должно реализовать определенный интерфейс. Однако я не забочусь о том, какой объект/класс он есть, если он реализует методы из определенного интерфейса.Java-атрибут, который реализует определенный интерфейс

Есть ли способ достичь такого поведения?

В Objective-C, я хотел бы сделать это следующим образом:

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

' MyInterface Аттрибут;' –

ответ

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>()); 

Ваш комментарий:

Я не думаю, что из интерфейсов в качестве типов. Больше похоже на объект, который имеет объект.

В Java интерфейс является типом. Если вы хотите какой-то тип, заявившей два интерфейса в то же время, вы можете создать третий интерфейс, который простирается от обоих:

interface ThirdPartyInterface1 { 
} 

interface ThirdPartyInterface2 { 
} 

interface MyInterface extends ThirdPartyInterface1, ThirdPartyInterface2 { 
} 

public class YourClass { 
    private MyInterface attr; 
} 
+0

Спасибо! Что делать, если потребуется реализовать несколько интерфейсов? –

+0

@Jenox Переменные объявляются одним типом. –

+0

@Jenox вы можете использовать только один интерфейс. Убедитесь, что другие интерфейсы простираются от интерфейса верхнего уровня. –

Смежные вопросы