我正在使用反射 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/