Le jeu d'instancier java.lang.Void

Effet

Cet article crée un objet de java.lang.Void, Il s'agit d'un article qui a tenté d'appeler la méthode de l'objet.

Cependant, créer un objet de java.lang.Void n'a probablement aucun mérite, c'est donc juste un jeu.

code

J'ai également écrit un commentaire dans les commentaires.

import java.lang.reflect.Constructor;

public class CreateVoid {
    public static void main(String... args) throws Exception {
        //Comment obtenir une classe en spécifiant le nom de la classe sous forme de chaîne de caractères
        Class<Void> voidClazz1 = (Class<Void>)Class.forName("java.lang.Void");
        Void o1 = getVoid(voidClazz1);

        //Comment obtenir la classe à partir de la méthode réelle
        Class<Void> voidClazz2 = (Class<Void>)CreateVoid.class.getMethod("voidMethod", new Class[]{}).getReturnType();
        Void o2 = getVoid(voidClazz2);

        System.out.println(o1);//[email protected]
        //Puisque la méthode equals n'est pas remplacée, elle sera toujours fausse s'il s'agit d'une autre instance.
        System.out.println(o1.equals(o2));//false
        System.out.println(o1.hashCode());//476800120
        System.out.println(o1.toString());//[email protected]
        System.out.println(o1.getClass());//class java.lang.Void
    }

    //S'il est nul, ce sera un type primitif, donc Void(=java.lang.Void)est.
    public Void voidMethod(){return null;};

    //Class<Void>Créer un objet Void à partir de
    private static Void getVoid(Class<Void> voidClazz) throws Exception {
        //Recherche dans la source JDK`private Void() {}`Et le constructeur est privé, vous devez donc effectuer les opérations suivantes
        //1.Écrivez getDeclaredConstructor au lieu de getConstructor
        //2.Définissez l'indicateur accessible sur true
        Constructor<?> declaredConstructor = voidClazz.getDeclaredConstructor(new Class[]{});
        declaredConstructor.setAccessible(true);
        return (Void)declaredConstructor.newInstance(new Object[]{});
    }
}

Recommended Posts

Le jeu d'instancier java.lang.Void
Le monde de Clara-Rules (2)
Jugement du calendrier
Le monde de Clara-Rules (4)
Le monde de Clara-Rules (1)
Le monde de Clara-Rules (3)
Le monde de Clara-Rules (5)
L'idée du tri rapide
L'idée de jQuery
À propos de la gestion de Null
À propos de la description de Docker-compose.yml
Valeur médiane de trois valeurs
L'illusion de l'orientation objet
À propos du comportement de ruby Hash # ==
[Java] Supprimer les éléments de la liste
Suite: La parabole de la POO (omise)
Modifier seulement une partie du texte
Comprendre le mécanisme de base de log4j2.xml
'% 02d' Quel est le% de% 2?
[Rails] Vérifiez le contenu de l'objet
Remplacez le contenu du fichier Jar
Vérifiez la version de Cent OS
Explication de l'ordre des itinéraires ferroviaires
J'ai lu la source de ArrayList que j'ai lu
Les bases de SpringBoot + MyBatis + MySQL
Remarque sur le chemin de request.getRequestDispatcher
J'ai lu la source d'Integer
Ceci et cela de JDK
Vérifier l'état de migration des rails
L'histoire de @ViewScoped dévore la mémoire
Filtrer les fluctuations des données brutes
Expliquer les colonnes de Spree :: Taxonomie
Un mémorandum du problème FizzBuzz
J'ai lu la source de Long
Expliquez la colonne de Spree :: Product
Diverses méthodes de la classe String
À propos du rôle de la méthode initialize
Pensez aux 7 règles d'Optionnel
Obtenez l'ID de la numérotation automatique
J'ai lu la source de Short
J'ai lu la source de Byte
Ordre de traitement dans le programme
J'ai lu la source de String
L'origine des expressions Java lambda
[Ruby] Afficher le contenu des variables
Traitement d'image: jouons avec l'image
Filtrer le résultat de BindingResult [Spring]
Débogage à distance du SDK Cognos
À propos du niveau de journalisation de java.util.logging.Logger
L'histoire de la sortie de l'application Android sur le Play Store pour la première fois.