我有一个疑问,我无法找到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
两者都存在。
我怎么能撕掉那些不能“骂”的人?
答案 0 :(得分:5)
不可调用的标记为合成方法,您可以使用Method.isSynthetic()
进行检查。
根据JLS 13.1. The Form of a Binary:
7。除了默认构造函数,类初始化方法以及Enum类的values和valueOf方法之外,Java编译器在源代码中没有相应构造的任何构造都必须标记为合成。