我有两个类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
}
在任何给定时间只有一个类及其关联的线程正在运行,即应用程序在运行时检测到数据源并使用ClassOne
或ClassTwo
。我想在一个名为ParseMyData
的单独类中解析数据,但是对于设置它的最佳方法有点困惑,因此ParseMyData
可以从data
访问ClassOne
或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
?我必须使用反射吗?反射是唯一最好的使用方法吗?
对泛型和反思的新认识,所以很多人都非常欣赏思想和指示。
答案 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
检查,然后转为ClassOne
或ClassTwo
。但我建议你选择第一个选项。