类中的泛型和方法量

sse*_*ano 4 java generics reflection

我有一个疑问,我无法找到Java specification language定义的位置(我确定它是).

我有这个层次结构:

public interface Top<T extends Serializable>
{
    public String someMethod(T arg);
}

public class SubString implements Top<String>
{
    @Override
    public String someMethod(final String arg)
    {
        return "";
    }
}

public class SubSerializable implements Top<Serializable>
{
    @Override
    public String someMethod(final Serializable arg)
    {
        return "";
    }
}
Run Code Online (Sandbox Code Playgroud)

我执行这段代码:

public static void main(final String[] args)
{
    System.out.println(SubString.class.getMethods().length); // outputs 11
    System.out.println(SubString.class.getDeclaredMethods().length); // outputs 2
    System.out.println(SubSerializable.class.getMethods().length); // outputs 10
    System.out.println(SubSerializable.class.getDeclaredMethods().length); // outputs 1
}
Run Code Online (Sandbox Code Playgroud)

在类的getMethods返回数组中SubString有两个someMethod,一个带签名Serializable,另一个带签名String.即使在declaredMethods两者都存在.

我怎么能撕掉那些不能"骂"的人呢?

axt*_*avt 5

不可调用的一个被标记为合成方法,您可以使用它进行检查Method.isSynthetic().

根据JLS 13.1.二进制形式:

7.除了默认构造函数,类初始化方法以及Enum类的values和valueOf方法之外,Java编译器引入的源代码中没有相应构造的任何构造都必须标记为合成.