使用java泛型类型进行类型转换

使用java泛型类型进行类型转换,java,generics,reflection,Java,Generics,Reflection,我有一个对象o,可以将其转换为类型A和类型B。 我需要一个函数transformForType(Type t,Object o),它接受一个类型,比如a或B,并检查o是否为该类型,并对其进行处理以进行转换 函数的用法如下:bresult=tranformForType(B.class,o) 我的问题是如何定义transformfortype函数,如果可能,使用泛型类型的最佳方式是什么。 关于。类已经有了在运行时强制转换对象的方法--: 将对象强制转换到此class对象所表示的类或接口 你只要打

我有一个
对象o
,可以将其转换为类型A和类型B。

我需要一个函数
transformForType(Type t,Object o)
,它接受一个类型,比如a或B,并检查o是否为该类型,并对其进行处理以进行转换
函数的用法如下:
bresult=tranformForType(B.class,o)


我的问题是如何定义
transformfortype
函数,如果可能,使用泛型类型的最佳方式是什么。

关于。

已经有了在运行时强制转换对象的方法--:

将对象强制转换到此
class
对象所表示的类或接口

你只要打电话就行了。它将抛出一个
ClassCastException
,就像普通的cast一样

B result = B.class.cast(o);

类已具有在运行时强制转换对象的方法--:

将对象强制转换到此
class
对象所表示的类或接口

你只要打电话就行了。它将抛出一个
ClassCastException
,就像普通的cast一样

B result = B.class.cast(o);
一个简单的方法是:

static <T> T transformForType(Class<T>, Object o) { ...
static T transformForType(类,对象o){。。。
这对T类型没有任何限制,但当然,如果A/B实现相同的接口或具有相同的基类,则可以进一步细化该T:

static <T extends ABInterface> T transformForType(Class<T>, Object o) { ...
static T transformForType(类,对象o){。。。
比如说

请注意:显然,当您对希望转换的类型没有任何限制时,您可以使用另一个答案并调用
SomeClass.class.cast()
。但是如果您只允许特定类型,您可能需要使用这样一个
transformForType()
方法(然后将使用该
cast()
方法)!

一个简单的方法是:

static <T> T transformForType(Class<T>, Object o) { ...
static T transformForType(类,对象o){。。。
这对T类型没有任何限制,但当然,如果A/B实现相同的接口或具有相同的基类,则可以进一步细化该T:

static <T extends ABInterface> T transformForType(Class<T>, Object o) { ...
static T transformForType(类,对象o){。。。
比如说


请注意:显然,当您对希望转换的类型没有任何限制时,您可以使用另一个答案并调用
SomeClass.class.cast()
。但是如果您只允许特定类型,您可能需要使用这样一个
transformForType()
方法(然后将使用该
cast()
方法)!

绝对是一个好方法,感谢您为另一个答案留出了一点空间;-)@rgetman您能覆盖此强制转换方法吗?如果是,在哪里?在B中作为静态方法?为什么要覆盖此方法?它内置于Java中。如果您指的是“覆盖”,你不能-
类是
最终的
。这就是问题所在,对象可以是A,B,C等等。代码应该能够将对象A转换为B,或者B转换为C。这绝对是一个好方法,感谢你为另一个答案留出了一点空间;-)@rgetman你能覆盖这个强制转换方法吗?如果是这样,在哪里?在B中作为静态方法?为什么要覆盖此方法?它内置于Java中。如果您指的是“覆盖”,你不能-
类是
final
。这就是问题所在,对象可以是A、B、C等等。代码应该能够将对象A转换为B,或者B转换为C。最好不要忘记
o
是什么类型。最好不要忘记
o
是什么类型。但问题是:我如何调用这个转换pe(类,对象o)方法?@Cam它应该与您在问题中的示例中调用该方法的方式完全匹配?!但问题是:我如何调用此TransformForType(类,对象o)方法?@Cam它应该与您在问题中的示例中调用该方法的方式完全匹配?!