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两者都存在.
我怎么能撕掉那些不能"骂"的人呢?
不可调用的一个被标记为合成方法,您可以使用它进行检查Method.isSynthetic().
7.除了默认构造函数,类初始化方法以及Enum类的values和valueOf方法之外,Java编译器引入的源代码中没有相应构造的任何构造都必须标记为合成.