Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从泛型对象访问字段变量_Java_Android_Generics_Reflection - Fatal编程技术网

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();
    }