返回泛型类类型的方法的 Java VM 类型签名是什么?



方法是

public Set<BluetoothDevice> getBondedDevices ()

来自Android.bluetooth.BluetoothAdapter。

我在这里阅读了类型签名指南,包括如何使用L类名指定对象;但我不知道如何将其扩展到泛型(或者即使可能的话)。

泛型在运行时不存在;AFAIK,该语法不支持类型参数。

我不确定这是否适用于基类的类型参数(在运行时确实存在于反射中)。

如果您不确定该方法的签名是什么,javap来救援。

import java.util.*;
public class Example {
public Set<Float> getSet() {
return null;
}
}

您可以通过以下方式轻松检查签名

> javac Example.java
> javap -s -cp . Example
Compiled from "Example.java"
public class Example {
public Example();
descriptor: ()V
public java.util.Set<java.lang.Float> getSet();
descriptor: ()Ljava/util/Set;
}

您正在询问 Java 中的类型擦除。你的答案是对象。如果您有:

List<E> myList;

编译器将 E 解释为对象。这种情况称为类类型擦除。还有一种情况称为方法类型擦除。

最新更新