我正在尝试构建一个基于Java反射的更多类型的安全替代方案,并且遇到了一些问题。我有一个类BoundMethod<T>
绑定一个方法和一个对象,因此可以调用该方法,并以类型安全的方式返回结果(类型为T)。这涉及将一个Class传递给构造函数,并使用该类来转换返回值(即return returnType.cast(method.invoke(object, params))
)。
我遇到的问题是,如果我根据方法对象中getReturnType()
的结果自动创建这些对象,并且返回类型是原始对象,我会得到一个ClassCastException,因为你无法动态转换到原始类型。我需要一种替代适当的引用类型的方法,但我找不到一种简单的方法来实现这一点。
是否有一些预先构建的解决方案,或者我是否需要自己构建一个解决方案?
答案 0 :(得分:3)
检查returnType
并查看它是否是原语:
returnType.isPrimitive();
不幸的是,这会打开你自动装箱的值,但这就是当你混合泛型和基元时会发生什么。