2

public フィールドを更新する2 つのクラスがClassOneあります。つまり、ClassTwodata

public class ClassOne {
    public byte[] data = new byte[10];

    // Thread that updates data

}

public class ClassTwo {
    public byte[] data = new byte[10];

    // Thread that updates data

}

常に 1 つのクラスとそれに関連付けられたスレッドのみが実行されます。つまり、アプリは実行時にデータのソースを検出し、 または のいずれClassOneかを使用しますClassTwo。という別のクラスでデータを解析したいのですParseMyDataが、これを設定する最善の方法について少し混乱しているため、 またはのいずれかからParseMyDataアクセスできます。dataClassOneClassTwo

私は現在、次のようなジェネリックを使用してそれを実行しようとしています:

public class ParseMyData<T> {

    T classOneOrClassTwo;

    ParseMyData(T t) {
        classOneOrClassTwo = t;
    }

    public void parseIt() {
        // Need to access data from either ClassOne or ClassTwo here, something like:
        classOneOrClassTwo.data; // this obviously doesn't work
    }

私の質問はdata、クラス内からフィールドにアクセスするにはどうすればよいParseMyDataですか? リフレクションを使用する必要がありますか? リフレクションは使用する唯一かつ最良の方法ですか?

ジェネリックスとリフレクションは初めてなので、考えやポインタは大歓迎です。

4

1 に答える 1

4

フィールドを返すDataProviderメソッドを使用してインターフェイスを作成します。次に、クラスで代わりに書き込みます。getData()dataParseMyData<T>ParseMyData<T extends DataProvider>

public class ParseMyData<T extends DataProvider> {

    T classOneOrClassTwo;

    ParseMyData(T t) {
        classOneOrClassTwo = t;
    }

    public void parseIt() {
        classOneOrClassTwo.getData();
    }

または、バージョンを使用することもできますが、instanceof最初にチェックを行ってから、ClassOneまたはにキャストしますClassTwo。ただし、最初のオプションを使用することをお勧めします。

于 2013-10-21T12:45:23.147 に答える