使用类的Java casting对象
我有一个String、integer、double。。。我正在将数据保存到(使用类的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) {
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语句,只使用一个数据容器,而不使用整数、双精度和字符串的三个分隔容器?反思呢?这是一个解决方案吗?如何解决?