[JAVA] J'ai vérifié ça

Lors du référencement d'une classe externe à partir de la classe interne Nom de classe externe. Il semble y avoir une notation de, alors j'ai fait une petite recherche.

D'abord, j'ai trouvé


public class Main {
    public static void main(String []args) {
        TestThis t = new TestThis();
        t.this.hp = 10;///
    }


    public class TestThis {
        int hp;
        int mp;
        String name;
    }

}

Je me suis demandé si c'était le cas

t.this.hp = 10;

Cette partie est une éclipse et t ne peut pas être résolue dans un moule. Voulez-vous créer une classe t? Sortit de.

Si t.hp = 10;, qu'est-ce qui ne va pas?

Apparemment, l'interprétation de la classe intérieure était fausse,

class out~{ class in~{ } }

Image de. Sur cette base, expérimentez à nouveau avec Eclipse.

public class Main {
    public static void main(String []args) {
    	Outer o =  new Outer();
    	Outer.Inner oi = o.new Inner();
    	oi.innerPrint();
    }
    
    public class Outer{
	
        int outerhp = 10;
	
        public class Inner{
		
            public void innerPrint() {
                System.out.println(Outer.this.outerhp);
            }
		
        }
	
    }

}

Encore une erreur Selon Eclipse Il n'y a pas d'instance englobante principale de type accessible. Vous devez limiter l'allocation sur une instance englobante de type Main (par exemple, x.new A (), où x est une instance de Main).

Quand j'ai recherché, je n'ai pas compris un peu.

public class Main {
    public static void main(String []args) {
    	Outer o =  new Outer();
    	Outer.Inner oi = o.new Inner();
    	oi.innerPrint();
    }

    public static class Outer{

        int outerhp = 10;

        public class Inner{

            public void innerPrint() {
                System.out.println(Outer.this.outerhp);
            }

        }

    }

}

D'après le résultat, cela fonctionne sans aucune erreur. (La classe externe est définie sur statique)

Cela ressemble à quelque chose de proche d'un bogue, alors j'aimerais l'étudier demain. http://d.hatena.ne.jp/chiheisen/20110502/1304272928 En regardant la position du retrait, j'ai l'impression de dire quelque chose de différent de mon code. main (String [] args) est dans Outer ... Je n'ai jamais écrit un tel code.

Outer.Inner oi = o.new Inner();

Je pense que j'ai vu cette nouvelle façon dans un livre avant. Encore une fois, vous pouvez lire ce livre avec une souche d'arbre sur la couverture.

Chaque fois que je corrige le retrait, il se décale lol Je me demande si le format est différent si je l'ai collé depuis Eclipse.

Recommended Posts

J'ai vérifié ça
J'ai essayé de vérifier la vie précédente avant la vie précédente au lieu de Zundoko Kiyoshi
Je comprends ça! Match le plus court
cette
Modèle de disjoncteur que j'ai vérifié
J'ai vérifié Java Flight Recorder (JFR)
J'ai vérifié la partie de java.net.URL # getPath
J'ai vérifié le nombre de taxis avec Ruby