Java 从泛型对象访问字段变量
我有两个类,Java 从泛型对象访问字段变量,java,android,generics,reflection,Java,Android,Generics,Reflection,我有两个类,ClassOne和ClassTwo,它们更新公共字段数据,即 public class ClassOne { public byte[] data = new byte[10]; // Thread that updates data } 及 在任何给定时间,只有一个类及其关联线程正在运行,即,应用程序在运行时检测数据源,并使用ClassOne或ClassTwo。我想在一个名为ParseMyData的单独类中解析数据,但是对于设置此项的最佳方法有点困惑,这样Pa
ClassOne
和ClassTwo
,它们更新公共字段数据
,即
public class ClassOne {
public byte[] data = new byte[10];
// Thread that updates data
}
及
在任何给定时间,只有一个类及其关联线程正在运行,即,应用程序在运行时检测数据源,并使用ClassOne
或ClassTwo
。我想在一个名为ParseMyData
的单独类中解析数据,但是对于设置此项的最佳方法有点困惑,这样ParseMyData
就可以从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
}
公共类ParseMyData{
T一类或二类;
ParseMyData(T){
一类或二类=t;
}
公共信息技术(IT){
//这里需要访问ClassOne或ClassII中的数据,例如:
classone或classtwo.data;//这显然不起作用
}
因此,我的问题是如何从类ParseMyData
中访问字段data
?我必须使用反射吗?反射是唯一和最好的方法吗
由于对泛型和反射不熟悉,因此思想和指针非常受欢迎。使用返回数据
字段的方法getData()
创建一个接口DataProvider
。
然后在您的类中ParseMyData
您将编写ParseMyData
公共类ParseMyData{
T一类或二类;
ParseMyData(T){
一类或二类=t;
}
公共信息技术(IT){
classone或classtwo.getData();
}
或者,您也可以使用您的版本,但首先执行instanceof
检查,然后强制转换为ClassOne
或ClassTwo
。但我建议您使用第一个选项。使用方法getData()创建一个接口DataProvider
返回您的数据
字段。
然后在您的类中ParseMyData
您将编写ParseMyData
公共类ParseMyData{
T一类或二类;
ParseMyData(T){
一类或二类=t;
}
公共信息技术(IT){
classone或classtwo.getData();
}
或者,您也可以使用您的版本,但先执行实例的
检查,然后转换为ClassOne
或ClassTwo
。但我建议您使用第一个选项。ClassOne
和ClassTwo
都可以实现一个提供访问方法的接口。这是个问题在线程化程序中,这不是一个好主意。ClassOne
和ClassTwo
都可以实现一个提供访问方法的接口。在线程化程序中,这可能不是一个好主意。太棒了。今天早上先去看泛型,但没有意识到可以用接口扩展它。正如你所写的那样有意义-完成后,我将测试它和upvote/mark等。Thnx.Fantastic。今天早上首先去泛型,但没有意识到你可以用接口扩展它。正如你所写的那样,这很有意义-完成后,我将测试它和upvote/mark等。Thnx。
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
}
public class ParseMyData<T extends DataProvider> {
T classOneOrClassTwo;
ParseMyData(T t) {
classOneOrClassTwo = t;
}
public void parseIt() {
classOneOrClassTwo.getData();
}