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

时间:2019-06-06 16:25:59

标签: java java-native-interface

方法是

public Set<BluetoothDevice> getBondedDevices ()

来自Android.bluetooth.BluetoothAdapter。

我阅读了类型签名指南here,包括如何使用L class-name 指定对象;但是我不知道如何将其扩展到泛型类(或者即使有可能)。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果不确定该方法的签名是什么,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;
}

答案 2 :(得分:0)

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

List<E> myList;

编译器会将E解释为Object。这种情况称为“类类型擦除”。还有一种情况称为方法类型擦除。