gpt4 book ai didi

java - 从泛型基接口(interface)的实例中检索类型参数

转载 作者:IT老高 更新时间:2023-10-28 20:52:00 25 4
gpt4 key购买 nike

给定 2 个接口(interface):

public interface BaseInterface<T> { }
public interface ExtendedInterface<T0, T1> extends BaseInterface<T0> {}

还有一个具体的类:

public class MyClass implements ExtendedInterface<String, Object> { }

如何找出传递给 BaseInterface 接口(interface)的类型参数?

(我可以通过调用类似的方法来检索 ExtendedInterface 类型参数

MyClass.class.getGenericInterfaces()[0].getActualTypeArguments()

但我找不到一种简单的方法来递归到任何基本的通用接口(interface)并得到任何有意义的东西)。

最佳答案

这个问题一般来说不容易完全解决。例如,如果它是一个内部类,你还必须考虑包含类的类型参数,...

因为仅使用 Java 本身提供的反射泛型类型非常困难,所以我编写了一个库来完成这项艰巨的工作:gentyref。见 http://code.google.com/p/gentyref/对于您的示例,使用 gentyref,您可以执行以下操作:

Type myType = MyClass.class;

// get the parameterized type, recursively resolving type parameters
Type baseType = GenericTypeReflector.getExactSuperType(myType, BaseInterface.class);

if (baseType instanceof Class<?>) {
// raw class, type parameters not known
// ...
} else {
ParameterizedType pBaseType = (ParameterizedType)baseType;
assert pBaseType.getRawType() == BaseInterface.class; // always true
Type typeParameterForBaseInterface = pBaseType.getActualTypeArguments()[0];
System.out.println(typeParameterForBaseInterface);
}

关于java - 从泛型基接口(interface)的实例中检索类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/557663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com