gpt4 book ai didi

java - 如何从 Java 方法获取返回的对象列表对象类型?

转载 作者:行者123 更新时间:2023-12-01 12:15:53 24 4
gpt4 key购买 nike

我在类中有一个 getter 方法,它返回对象列表。它看起来像这样:

public List <cars> getCars() {

// some code here

}

该类除此之外还包含一些其他 getter。在另一个类中,我想获取第一个类中包含的所有 getter 方法,并显示方法的名称和返回的数据类型。

我能够获取上述方法的名称(getCars)及其返回的数据类型(List)。但是,我似乎无法将“汽车”作为列表包含的对象类型。我能得到的最好的是“ObjectType”。有没有办法让“汽车”显示出来?我读过有关类型删除以及如何在字节码中删除泛型的内容,因为它仅用于 Java 编译器的好处。我的问题与类型删除有关吗?

是否可以显示“Cars”一词?当我读到类型删除时,似乎有一种方法可以从列表中获取泛型,但我看到的示例是针对字符串和整数而不是对象。

Get generic type of java.util.List

谢谢

最佳答案

您可以使用标准 Java 反射获取有关方法的(通用)信息:

Class<?> yourClass = Class.forName("a.b.c.ClassThatHasTheMethod");
Method getCarsMethod = yourClass.getMethod("getCars");
Type returnType = getCarsMethod.getGenericReturnType();

现在没有一种特别优雅的方法来处理这个 returnType 变量(据我所知)。它可以是一个普通的Class,也可以是 subinterfaces 中的任何一个。 (例如 ParameterizedType,在本例中就是如此)。过去,当我这样做时,我只需要使用 instanceof 和强制转换来处理这些情况。例如:

if (returnType instanceof Class<?>) {
Class<?> returnClass = (Class<?>)returnType;
// do something with the class
}
else if (returnType instanceof ParameterizedType) {
// This will be the case in your example
ParameterizedType pt = (ParameterizedType)returnType;
Type rawType = pt.getRawType();
Type[] genericArgs = pt.getActualTypeArguments();

// Here `rawType` is the class "java.util.List",
// and `genericArgs` is a one element array containing the
// class "cars". So overall, pt is equivalent to List<cars>
// as you'd expect.
// But in order to work that out, you need
// to call something like this method recursively, to
// convert from `Type` to `Class`...
}
else if (...) // handle WildcardType, GenericArrayType, TypeVariable for completeness

关于java - 如何从 Java 方法获取返回的对象列表对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27013301/

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