2

我有两个类,ClassOne并且ClassTwo,它们更新一个公共字段data,即,

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

}

在任何给定时间,只有一个类及其关联线程正在运行,即应用程序在运行时检测数据源并使用ClassOneClassTwo。我想在一个名为 的单独类中解析数据ParseMyData,但对于设置它的最佳方法有点困惑,以便ParseMyData可以dataClassOne或访问ClassTwo

我目前正在尝试使用泛型来做到这一点,例如:

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先进行检查,然后再转换为ClassOneor ClassTwo。但我建议你选择第一个选项。

于 2013-10-21T12:45:23.147 回答