Dieser Artikel erstellt ein Objekt von java.lang.Void
,
Dies ist ein Artikel, der versucht hat, die Methode des Objekts aufzurufen.
Das Erstellen eines Objekts von "java.lang.Void" hat jedoch wahrscheinlich keinen Wert, es ist also nur ein Spiel.
Ich habe auch einen Kommentar in den Kommentaren geschrieben.
import java.lang.reflect.Constructor;
public class CreateVoid {
public static void main(String... args) throws Exception {
//So erhalten Sie eine Klasse, indem Sie den Klassennamen als Zeichenfolge angeben
Class<Void> voidClazz1 = (Class<Void>)Class.forName("java.lang.Void");
Void o1 = getVoid(voidClazz1);
//So erhalten Sie die Klasse von der tatsächlichen Methode
Class<Void> voidClazz2 = (Class<Void>)CreateVoid.class.getMethod("voidMethod", new Class[]{}).getReturnType();
Void o2 = getVoid(voidClazz2);
System.out.println(o1);//java.lang.Void@1c6b6478
//Da die Methode equals nicht überschrieben wird, ist sie immer falsch, wenn es sich um eine andere Instanz handelt.
System.out.println(o1.equals(o2));//false
System.out.println(o1.hashCode());//476800120
System.out.println(o1.toString());//java.lang.Void@1c6b6478
System.out.println(o1.getClass());//class java.lang.Void
}
//Wenn es nichtig ist, wird es ein primitiver Typ sein, also nichtig(=java.lang.Void)ist.
public Void voidMethod(){return null;};
//Class<Void>Erstellen Sie ein Void-Objekt aus
private static Void getVoid(Class<Void> voidClazz) throws Exception {
//Blick in die JDK-Quelle`private Void() {}`Und der Konstruktor ist privat, daher müssen Sie Folgendes tun
//1.Schreiben Sie getDeclaredConstructor anstelle von getConstructor
//2.Setzen Sie das Access-Flag auf true
Constructor<?> declaredConstructor = voidClazz.getDeclaredConstructor(new Class[]{});
declaredConstructor.setAccessible(true);
return (Void)declaredConstructor.newInstance(new Object[]{});
}
}
Recommended Posts