2011-07-08 4 views
4

は時々私は具体的なクラスは、いくつかの名前の変数が含まれている場合は、それをテストするための方法を別の方法があり、いくつかの変数(複数可)を宣言しているクラスをテストする必要がテストクラスは、その名前に基づいて、インスタンス変数が含まれている場合は、

try { 
    testLocalVariable = (String) (this.getClass().getDeclaredField("testVariable").get(this)); 
} catch (NoSuchFieldException ex) { 
} catch (SecurityException ex) { 
} catch (IllegalArgumentException ex) { 
} catch (IllegalAccessException ex) { 
} 
+3

問題を解決しようとしているのではなく、解決しようとしている根本的な問題についてもう少し背景/文脈を与えることができますか?また、いくつかの名前とタイプのメンバフィールドがあるかどうか、あるいはインスタンスの平等性をチェックしたいのですか? – jtoberon

+0

あなたが説明したことは、それを行う方法がかなりあります。しかし、このシナリオはちょっと怪しいですね。あなたはあなたがやっていることを行うための正当な理由があるかもしれませんが、このパターンの9倍はOO設計が悪い結果です。 – biziclop

+0

このようにすることができます。 getField()や再帰を使ってスーパークラスをチェックするのを忘れないでください。 –

答えて

2

私が正しく理解している場合、スーパークラスでこのコードを使用して、サブクラスにtestVariableフィールドがあるかどうかをテストします。

なぜこのようなメソッドを追加しないのですか?

/** 
    * Returns true if the object declares a testVariable field, false otherwise. Subclasses should 
    * override this method 
    */ 
protected boolean hasTestVariableField() { 
    return false; 
} 

私にはるかに多くのOOが見えますが、カプセル化は中断しません。

しかし、私はあなたがなぜこれを最初に必要としたのか本当に理解していません。

+0

dataデータベースに格納されています(最後に知っている...)、デバッグのために私は実際にクラス間でジャンプしたくない(空白...何でも)。その後、いくつかのショートカットを書いた – mKorbel

+0

私は "このようなメソッドを単に追加するのではないでしょうか? "そこに私は必要な設定/取得値:-) – mKorbel

2

クラスにはフィールドがあり、ローカル変数はありません。

getDeclaredField()を使用できますが、スーパークラスで宣言されたフィールドは見つかりません。

フィールドがある場合に例外が発生しない場合は、フィールド値を参照する必要はありません。

+0

ありがとうございましたField ...ありがとうございましたset/get/checkが存在する場合は問題ありませんが、別の方法で(Javaでは)私の質問はありませんが、文字列の値のみをテストするためです:-) – mKorbel

関連する問題