从通用对象访问字段变量

时间:2013-10-21 12:41:22

标签: java android generics reflection

我有两个类ClassOneClassTwo,用于更新公共字段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可以从data访问ClassOneClassTwo

我目前正在尝试使用泛型,例如:

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?我必须使用反射吗?反射是唯一最好的使用方法吗?

对泛型和反思的新认识,所以很多人都非常欣赏思想和指示。

1 个答案:

答案 0 :(得分:4)

使用方法DataProvider创建一个界面getData(),该方法会返回您的data字段。 然后在您的班级ParseMyData<T>中,您将改为编写ParseMyData<T extends DataProvider>

public class ParseMyData<T extends DataProvider> {

    T classOneOrClassTwo;

    ParseMyData(T t) {
        classOneOrClassTwo = t;
    }

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

或者您也可以使用自己的版本,但先进行instanceof检查,然后转为ClassOneClassTwo。但我建议你选择第一个选项。