2009-08-06 3 views
0

javaでは、instanceOfキーワードを使用してisA関係をチェックできます。しかしhasA関係もチェックすることは可能ですか?javaでhas-a関係をチェックすることは可能ですか?

+1

「hasA」を少し明確に定義する必要があります。つまり、どのようなコンテキストを意味するのかは不明です。モデリング「hasA」、またはオブジェクト「hasA」である可能性があります。いくつかの擬似コードや実際のコードはどうですか? – Chii

答えて

1

あなたがそれを行う独自の方法を書くならば。

public class Human { 

    private Human parent; 

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

} 
+0

@PJPと@Scharrels、これは私にとってはうまくいくと思います。 –

2

Reflectionでこれを行うことができますが、これがJavaのコンテキストでどのように役立つかはわかりません。 Javaは、オブジェクトモデリング言語ではなく、プログラミング言語として設計されています。

EDIT - 私は、あなたが言語レベルでこれをしたいと思っています。ただ、たくさんの 'hasA'メソッドをコーディングするよりもむしろ。

0

プレーンアソシエーション/アグリゲーションコンストラクトは言語要素ではなく、プログラムコードで記述します。だからあなたはチェッカーメソッドも書いています。

4

オブジェクトに特定のタイプのプロパティがあるかどうかをチェックしますか?これを行うための組み込みの方法はありません。リフレクションを使用する必要があります。

代わりに、関連するプロパティを持つインターフェイスを定義し、次にオブジェクトがinstanceofを使用してそのインターフェイスを実装しているかどうかを確認します。

なぜこれをやりたいのですか?それはちょうど投機ですか、あるいはあなたは念頭に置いて特別な問題がありますか?後者の場合は、詳しく説明してください:タスクに近づく方が良いかもしれません。

+0

実際にはそれは「良い」機能を持つでしょう。要点は、クラスがClass1のオブジェクトを持っている場合に、いくつかのメソッドを実行したいとします。この場合、 'having'というキーワードが 'instanceOf'と同じように簡単に実行できます。私はPJPとScharrelsの答えに満足していますが。 –

+0

現時点では「持っていれば良い」と私は同意するとは言えません。あなたはこれが最もエレガントなデザイン*と*余分な言語機能によってより良いものになる具体的な例を私に見せなければなりません。 –

1

HASAの関係は、多くの場合、クラスのプライベート変数としてモデル化されています

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()メソッドを使って関係をチェックすることができます。

関連する問題