2010-10-26 7 views
1

IntelliJ met en surbrillance la variable 'foo' en gris, et dit "affectation n'est pas utilisée". Ce que je veux savoir est - c'est vrai ou pas ...Les variables groovy sont-elles initialisées à zéro, ou s'agit-il d'un bug IntelliJ?

Si c'était java et pas groovy, je sais que ce ne serait pas correct.

public class Foo 
{ 
    public Foo() 
    { 
    Foo foo = null; // this 'foo' instance is gray ("assignment not used") 
    try 
    { 
     foo = new Foo() 
     // ... 
    } 
    finally 
    { 
     if (foo != null) 
     foo.release(); 
    } 

    } 

    public void release(){} 
} 
+0

Vous définissez une veriable locale '' foo' à null' alors immédiatement mis à 'nouveau Foo()' ... Je suis d'accord avec IntelliJ –

+0

@tim_yates - vous auriez tort . Si le constructeur de Foo lève une exception, alors foo n'est jamais initialisé. – ripper234

Répondre

5

des variables Groovy (et Java) sont toujours initialisées à null: Java Language Specification: Initial Values of Variables.

Éditer: Ce qui précède ne s'applique pas aux variables locales. En Java, ils doivent toujours être assignés explicitement. Je ne trouve aucune référence à cela dans les spécifications groovy. Cependant, l'examen de certaines déclarations de variables locales avec le navigateur groovyConsole AST confirme que groovy affecte implicitement null aux variables locales.

+1

Ceci ne s'applique pas aux variables de pile/locales. Essayer de lire une variable locale sans l'initialiser en premier, et vous êtes dans une erreur de compilation. – ripper234

+0

Oups, désolé, vous avez raison. Java nécessite [Affectation définie] (http://java.sun.com/docs/books/jls/third_edition/html/defAssign.html) pour être prouvé par le compilateur. Je ne trouve aucune référence à cela dans les spécifications groovy. Cependant, l'examen de certaines déclarations de variables locales avec le navigateur groovyConsole AST confirme que groovy affecte implicitement null aux variables locales. – ataylor

+0

Cool, donc ce n'est en fait pas un bug dans IntelliJ. – ripper234

Questions connexes