Reflexion APIは、Java配列クラスがインターフェースjava.lang.Cloneableおよびjava.io.Serializableを実装していることを示しています。メンバーは宣言されていません。
私の質問は次のとおりです。
この「長さ」はどこで定義されていますか?
保護されたオブジェクトclone()は、byte []に直接割り当てることができるため、共変リターンタイプ(Objectを置き換えるbyte [])を使用してパブリックアクセス指定子でオーバーライドされますか?
- CloneableおよびSerializableとの関連付け(IS-A)はどこで定義されていますか?
また、byte []クラスのアクセス指定子には、Javaのクラスまたはメソッドの正当な組み合わせではない「abstractfinal」が含まれています。
import java.lang.reflect.*;
public class ArrayExplorer {
public static void main(String[] args) {
explore("Current class:", byte[].class);
byte[] bytes = { 65, 'A' };
System.out.println(bytes.length);
byte[] cloned = bytes.clone();
System.out.println(cloned);
}
private static void explore(String msg, Class<?> class1) {
if (class1 == null)
return;
System.out.println("**************************************\n" + msg
+ Modifier.toString(class1.getModifiers()) + " " + class1);
// if (class1 == Object.class)
// return;
Field[] fields = class1.getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
}
Method[] methods = class1.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method);
}
explore("Superclass:", class1.getSuperclass());
explore("Classes:", class1.getClasses());
explore("ComponentType:", class1.getComponentType());
explore("DeclaredClasses:", class1.getDeclaredClasses());
explore("DeclaringClass:", class1.getDeclaringClass());
explore("EnclosingClass:", class1.getEnclosingClass());
if (!class1.isInterface()) {
explore("Interfaces:", class1.getInterfaces());
}
}
private static void explore(String msg, Class<?>[] classes) {
if (classes == null || classes.length == 0)
return;
System.out.println(msg);
for (Class<?> class1 : classes) {
explore("", class1);
}
}
}