使用类的Java casting对象

使用类的Java casting对象,java,reflection,casting,Java,Reflection,Casting,我有一个String、integer、double。。。我正在将数据保存到(Oblect dataHolder)和(Class dataHolderClass)。 我的问题是如何将数据持有者转换回int,字符串 例如,我有以下数据类: class DataHolderClass { private Object data; private Class classData; DataHolderClass(Object data, Class dataClass) {

我有一个String、integer、double。。。我正在将数据保存到(
Oblect dataHolder
)和(
Class dataHolderClass
)。 我的问题是如何将数据持有者
转换回
int
字符串

例如,我有以下数据类:

class DataHolderClass {
    private Object data;
    private Class classData;

    DataHolderClass(Object data, Class dataClass) {
        this.data = data;
        this.classData = dataClass;
    }

    Object getDataBack() {
        return this.data;
    }

    Class getDataClassBack() {
        return this.classData;
    }
}
那么,我如何在知道
dataClass
并拥有
data
的情况下重新转换数据呢? 下面是一些调用代码(不确定是否有可能实现这种魔力):


这是因为Java5-泛型

class DataHolderClass<T> {
    T data;

    DataHolderClass(T data) { ... }
    T getData() { 
        return data;
    }
}
类DataHolderClass{
T数据;
DataHolderClass(T数据){…}
T getData(){
返回数据;
}
}

您可以使用开箱即用的类型安全性。

自从Java5-泛型之后,它就出现在这里了

class DataHolderClass<T> {
    T data;

    DataHolderClass(T data) { ... }
    T getData() { 
        return data;
    }
}
类DataHolderClass{
T数据;
DataHolderClass(T数据){…}
T getData(){
返回数据;
}
}

您具有开箱即用的类型安全性。

如果您可以限制DataObject可以是什么选项,那么您可以使用带有instanceof复选框的If/else序列,如

 Integer castInt;
 Double castDbl;
 String castStr;  
 if (dataObject instanceof Integer) castInt = (Integer) dataObject;
 else if (dataObject instanceof Double) castDbl = (Double) dataObject;
 else if (dataObject instanceof Double) castStr = (String) dataObject;

完成后,您最终会遇到一个问题,即如何从其上使用强制转换字段。

如果您可以限制DataObject可以是什么选项,那么您可以将If/else序列与instanceof check一起使用,如下所示

 Integer castInt;
 Double castDbl;
 String castStr;  
 if (dataObject instanceof Integer) castInt = (Integer) dataObject;
 else if (dataObject instanceof Double) castDbl = (Double) dataObject;
 else if (dataObject instanceof Double) castStr = (String) dataObject;

这样一来,你就有了一个问题:从上面使用什么施法场。

使用a。我不明白。投什么?如果调用站点已经有某种类型的变量来存储数据,则该变量就是要转换到的类型。如果没有,为什么需要强制转换呢?我有一个第二个类,它的方法获取DataHolderClass作为参数。从DataHolderClass对象中提取数据并将其用于某些用途。但它会将数据(以某种方式)转换回原始数据类型(classData)。请发布相关代码。这还没有意义。调用代码必须围绕特定的数据类型静态编写。不能有变量数据类型。您的意思是
dataClass.cast(数据)
?但听起来你不需要这个。如果调用者已经知道将结果放入
DataType
类型的变量中,为什么需要进行反射式强制转换?如果它事先不知道
数据类型
类型,那么它无论如何都需要将其存储到
对象
变量中,那么为什么要强制转换呢?无法在运行时选择变量类型。请使用。我不明白。投什么?如果调用站点已经有某种类型的变量来存储数据,则该变量就是要转换到的类型。如果没有,为什么需要强制转换呢?我有一个第二个类,它的方法获取DataHolderClass作为参数。从DataHolderClass对象中提取数据并将其用于某些用途。但它会将数据(以某种方式)转换回原始数据类型(classData)。请发布相关代码。这还没有意义。调用代码必须围绕特定的数据类型静态编写。不能有变量数据类型。您的意思是
dataClass.cast(数据)
?但听起来你不需要这个。如果调用者已经知道将结果放入
DataType
类型的变量中,为什么需要进行反射式强制转换?如果它事先不知道
数据类型
类型,那么它无论如何都需要将其存储到
对象
变量中,那么为什么要强制转换呢?您不能在运行时选择变量类型。我知道如何使用泛型,但如果我将其发送给另一个只知道其参数是DataHolderClass对象的方法,我如何将其转换回?它可以提取数据,提取类,但如何将其强制转换回?将方法从
foo(DataHodlerClass)
更改为
foo(DataHolderClass)
这是在预定义DataHolderClass中包含的数据类型时。如果我想使用DataHolderClass作为一个通用容器,它还可以为我提供有关所包含数据类型的信息,该怎么办?以及如何在没有if-else语句的情况下将其转换回原始类型(T、String、Integer…)?请提供一个用例。您不需要“通用容器”。对于某些情况,您需要一个容器。我知道如何使用泛型,但是如果我将它发送给另一个只知道其参数是DataHolderClass对象的方法,我如何将其转换回?它可以提取数据,提取类,但如何将其强制转换回?将方法从
foo(DataHodlerClass)
更改为
foo(DataHolderClass)
这是在预定义DataHolderClass中包含的数据类型时。如果我想使用DataHolderClass作为一个通用容器,它还可以为我提供有关所包含数据类型的信息,该怎么办?以及如何在没有if-else语句的情况下将其转换回原始类型(T、String、Integer…)?请提供一个用例。您不需要“通用容器”。对于某些情况,您需要一个容器。是否有一种迂回的方法来定义数据类型,而不使用if-else语句,只使用一个数据容器,而不使用整数、双精度和字符串的三个分隔容器?反思呢?这是一个解决方案吗?有没有一种迂回的方法来定义数据类型,而不使用if-else语句,只使用一个数据容器,而不使用整数、双精度和字符串的三个分隔容器?反思呢?这是一个解决方案吗?如何解决?