类中的泛型和方法量

时间:2013-12-11 11:10:27

标签: 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 "";
    }
}

我执行这段代码:

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
}

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

我怎么能撕掉那些不能“骂”的人?

1 个答案:

答案 0 :(得分:5)

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

根据JLS 13.1. The Form of a Binary

  

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