2009-08-06 2 views
0

В java мы можем использовать instanceOf ключевое слово, чтобы проверить отношения isA. Но можно ли также проверить hasA-отношения?Возможно ли в java проверить наличие отношений?

+1

Вы должны определить «hasA» немного более четко - его непонятно, какой контекст вы имеете в виду - это может быть модельное «hasA», или может быть, что объект «hasA». Как насчет какого-нибудь кода psuedo или фактического кода? – Chii

ответ

1

Если вы напишете свой собственный метод для этого.

public class Human { 

    private Human parent; 

    .. 
    public boolean hasParent() { 
     return parent!=null; 
    } 

} 
+0

@PJP и @Scharrels, я думаю, это сработает для меня. –

2

Я полагаю, что вы могли бы сделать это с отражением, но я не могу видеть, как это было бы полезно, что нужно сделать в контексте Java. Java разработан как язык программирования, а не язык моделирования объектов.

EDIT - Я предполагаю, что вы хотите сделать это на лингвистическом уровне ... а не просто кодировать целую кучу методов hasA.

0

Простые ассоциации/агрегационные конструкции не являются языковыми элементами, вы пишете их в программном коде. Таким образом, вы также пишете методы проверки.

4

Вы хотите сказать, хотите ли вы иметь объект определенного типа? Нет никакого встроенного способа сделать это - вам придется использовать отражение.

Альтернативой является определение интерфейса, который имеет соответствующее свойство, - тогда проверьте, реализует ли этот объект этот интерфейс, используя instanceof.

Почему вы хотите это сделать? Это просто спекуляция, или у вас есть конкретная проблема? Если это последний, пожалуйста, уточните: может быть, есть лучший способ приблизиться к задаче.

+0

На самом деле это будет «хорошо иметь» функциональность. Дело в том, что вы хотите выполнить какой-либо метод, если в классе есть объект Class1, тогда вы можете сделать это легко, если есть ключевое слово «иметь», как «instanceOf». Хотя я доволен ответом PJP и Scharrels. –

+0

Я не могу сказать, что согласен, что на данный момент «хорошо иметь». Вы должны показать мне конкретный пример, где это самый элегантный дизайн * и *, где дополнительная языковая функция улучшит его. –

1

отношение обладает А часто моделируются как частные переменной в классе:

Public class AClass { 
    private AnotherClass reference; 

    public AClass() { 
    reference = null; 
    } 

    public boolean hasAnotherClass(){ 
    return reference != null; 
    } 

    // getters and setters are left out for readability 

} 

Вы можете просмотреть и изменить ссылку, используя геттер и сеттер. Вы можете проверить отношение, используя метод hasAnotherClass().

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