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

时间:2019-04-30 18:17:12

标签: java generics reflection

我有一个Object o,可以将其强制转换为类型A和类型B。

我需要一个带有类型的函数transformForType(Type t, Object o),让我们说A或B并检查它的类型并对其进行处理以对其进行转换。
该函数的用法类似于:B result = tranformForType(B.class, o);


我的问题是定义tranformForType函数的方法是什么,以及如果可能的话,使用泛型类型的最好方法是什么?
问候。

2 个答案:

答案 0 :(得分:4)

Class类已经具有在运行时强制转换对象的方法-the cast method

  

将对象投射到此Class对象表示的类或接口中。

您只需要调用它。它将像普通演员一样抛出ClassCastException

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

答案 1 :(得分:0)

一种简单的方法是:

static <T> T transformForType(Class<T>, Object o) { ...

该T类型没有任何限制,但是,当然,如果A / B实现相同的接口或具有相同的基类,则可以进一步优化该T:

static <T extends ABInterface> T transformForType(Class<T>, Object o) { ...

例如。

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