gpt4 book ai didi

java - Java 中的 getGenericSuperclass()。它是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 06:49:21 24 4
gpt4 key购买 nike

让我们考虑以下代码:

package index;

public class Main {
public static void main(String[] args) {
Inner inner = new Inner();
Type t = inner.getClass().getGenericSuperclass();
ParameterizedType p = (ParameterizedType) t;
Type[] a = p.getActualTypeArguments();
try {
Custom c = (Custom) ((Class) a[0]).newInstance();
c.f();
} catch (Exception e){}
}

private static abstract class AbstractClass<T> {
public abstract void doSth();
}
private static class Inner extends AbstractClass<Custom>{
public void doSth() {
}
}
private static class Custom{
public Custom(){

}
public void f(){
System.out.println("Custom");
}
}
}
  1. 它可以工作,但我不明白它是如何工作的。它表明可以获取有关父类(super class)参数的信息。我不知道怎么可能得到这样的信息,因为我查看了字节码并没有这样的信息:

  2. 这样做可以吗?

最佳答案

.class 文件中有一个Signature 属性,参见JVMS §4.7.9 .

如果你用 javap -verbose 反编译 Main.Inner,你会发现这个属性:

Signature: #14    // Lindex/Main$AbstractClass<Lindex/Main$Custom;>;

Class.getGenericSuperclass实现在 native method 的帮助下提取此属性然后解析、验证并将其转换为 Java 表示。所以,获取这些信息是绝对可能的,也是可以的。

关于java - Java 中的 getGenericSuperclass()。它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42874197/

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