2017-09-14 12 views
0

私はブール値型のすべての8つのパラメータ(p1、p2、...)を持つクラスを持っているので、のを持つセッターメソッドを作成することが可能かどうかは疑問でした。オブジェクトの可変メンバ(設定するp1、p2、...のいずれかを決定する)との値を使用して、8つのセッターを作成するのではなく)。それは、これらのP1〜P8のいずれかのuniverzalセッターを作成することが可能である方法Univerzalクラスsetter - Java

public class SomeClass{ 

    private boolean p1; 
    private boolean p2; 
    private boolean p3; 
    private boolean p4; 
    private boolean p5; 
    private boolean p6; 
    private boolean p7; 
    private boolean p8; 
} 

は、我々はクラスを以下しているとしましょうか?あなたは、一般的にそれが機能的に言​​ってint型

void setP(Integer i, Boolean value) { 
    BeanUtils.setProperty(this, "p"+i.toString(), value); 
} 

を使用してapache commons

void setP(String name, Boolean value) { 
    BeanUtils.setProperty(this, name, value); 
} 

やからBeanUtilsを使用していますが、両方以来、それは完全に安全ではありません知ることができる

public void setP(SomeClass.param p, boolean value) 
+0

Reflection APIを使用することもできますが、そのようなことをすることを強くお勧めします。フィールドごとにセッターを作成するのに間違いはありません。 –

+2

BitSetの使用を検討しましたか? http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html。一緒にバンドルするのは良い考えではないかもしれませんが、p1〜p8が本当に別々のパラメータであるべきでない場合は、ゲッター/セッターの1つが意味をなさないかもしれません。 – Mic

+1

おそらくクラスが悪い設計です。すべてが似たような現実的な性質を持っているなら、多分配列が良いでしょうか? –

答えて

0

:何かのように私は不正な値をとるかもしれませんし、健全性をチェックしてください。そうでなければ、IllegalAccessExceptionまたはInvocationTargetExceptionが得られます。 8セッターを使用する利点は、もちろんコンパイル時のチェックであり、あなたのideはそれらをあなたのために書くことができます。 もちろん、このライブラリはリフレクションを使用しています。

関連する問題