java - 反射 api 对函数的返回类型进行重载

标签 java reflection

我正在使用反射 API 对 Java 方法进行一些查询。下面是找出调用返回类型的代码片段,例如new java.lang.StringBuilder().append('a'):

Class<?> c = Class.forName("java.lang.StringBuilder");
Method[] mList = c.getMethods();

for (int i = 0; i < mList.length; i++) {
    if (mList[i].getName() == "append" 
          && mList[i].getParameterTypes().length == 1 
          && mList[i].getParameterTypes()[0].getCanonicalName() == "char") {
        System.out.println(mList[i]);
    }
}

奇怪的是,输出给出

public java.lang.AbstractStringBuilder java.lang.StringBuilder.append(char)

public java.lang.Appendable java.lang.StringBuilder.append(char) throws java.io.IOException

public java.lang.StringBuilder java.lang.StringBuilder.append(char)

而Java API规范仅给出StringBuilder作为返回类型。这是否意味着 append 方法实际上在返回类型上重载?

最佳答案

来自javadocs我们有:

Returns an array containing Method objects reflecting all the public member methods of the class or interface represented by this Class object, including those declared by the class or interface and those inherited from superclasses and superinterfaces. Array classes return all the (public) member methods inherited from the Object class. The elements in the array returned are not sorted and are not in any particular order. This method returns an array of length 0 if this Class object represents a class or interface that has no public member methods, or if this Class object represents a primitive type or void.

 StringBuilder extends AbstractStringBuilder 

 AbstractStringBuilder implements Appendable

这就是为什么你有 3 种方法。

关于java - 反射 api 对函数的返回类型进行重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29100438/

相关文章:

java - 在 spring boot 中从依赖项目访问父级的 application.properties

c# - 如何查找方法是否正在实现特定接口(interface)

java - 从 ByteBuffer 到双数组

java - 根据用户输入创建多个对象

java - Libgdx 坐标系原点(0,0),不在屏幕左下角

android - 在 Android 库 Java 中使用用户定义的方法

c# - 在 C# 中注册一个类的所有声明的子类

c# - 使用反射创建命名空间中所有类的列表并转换为其真实类型

reflection - Reflect 认为 struct Value 也是一个 ptr?

java - 使用tomcat作为服务器连接到derby数据库