web-dev-qa-db-fra.com

Nouvelle/étrange Java "try ()" syntaxe?

Lors de la manipulation des options de formatage personnalisées dans Eclipse, dans l'un des exemples de code, j'ai vu le code comme suit:

/**
 * 'try-with-resources'
 */
class Example {
    void foo() {
        try (FileReader reader1 = new FileReader("file1"); FileReader reader2 = new FileReader("file2")) {

        }
    }
}

Je n'ai jamais vu try utilisé de la sorte et je code en Java depuis 9 ans! Est-ce que quelqu'un sait pourquoi vous feriez cela? Quel est un cas d'utilisation/avantage possible de le faire?

Un autre morceau de code que j'ai vu, je pensais que c'était un raccourci très utile, alors je le partage ici aussi, c'est assez évident de voir ce qu'il fait:

/**
 * 'multi-catch'
 */
class Example {
    void foo() {
        try {
        } catch (IllegalArgumentException | NullPointerException | ClassCastException e) {
            e.printStackTrace();
        }
    }
}
49
Ali

Elle a été ajoutée à Java 7. L’application est l’instruction try-with-resources .

/modifier

Pourriez aussi bien jeter ceci ici aussi. Vous pouvez utiliser l'instruction try-with-resources pour gérer Locks si vous utilisez une classe wrapper comme celle-ci:

public class CloseableLock implements Closeable {
    private final Lock lock;

    private CloseableLock(Lock l) {
        lock = l;
    }

    public void close() {
        lock.unlock();
    }

    public static CloseableLock lock(Lock l) {
        l.lock();
        return new CloseableLock(l);
    }
}

try(CloseableLock l = CloseableLock.lock(lock)) { // acquire the lock
    // do something
} // release the lock

Cependant, comme vous devez déclarer une variable pour chaque ressource, son avantage est discutable.

60
Jeffrey

Voici la nouvelle déclaration de test avec ressources - de Java 7: http://download.Oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

10
Michael Schmeißer

Ce sont des changements introduits dans JDK7.

La première déclaration est un essai avec des ressources. Je ne sais pas exactement pourquoi elles existent, mais les exceptions sont souvent causées par des flux d'entrée, etc. Je suppose que cela améliore simplement la lisibilité. Edit: grâce aux autres intervenants, j'ai lu le javadoc et je sais maintenant qu'il va fermer tous les flux d'E/S implémentant AutoCloseable, en supprimant le besoin d'un bloc finally dans de nombreuses situations

La deuxième est une capture multiple, ce qui est très pratique lorsque vous avez différentes exceptions que vous gérez exactement de la même manière.

6
MarioDS

C'est ce qu'on appelle try-with-resource. C'est une façon de ne pas avoir à nettoyer après vous-même car la langue le fera pour vous.

1
kasavbere

Même utilisation que using(Resource) dans C Sharp, ce qui signifie que cette ressource sera automatiquement recyclée lorsque votre programme aura levé en dehors de ce bloc de code.

L'instruction try-with-resources garantit que chaque ressource est fermée à la fin de l'instruction. Tout objet implémentant Java.lang.AutoCloseable, qui inclut tous les objets implémentant Java.io.Closeable, peut être utilisé comme ressource.

La déclaration try-with-resources

0
Chopping

Cela s'appelle essayer avec des ressources. lors d'une tentative avec des ressources, tout type de flux pouvant être fermé déclaré dans la section des ressources sera fermé après l'exécution de l'instruction try Donc c'est à peu près un 

try{
InputStream is;
//Stuff
}finally{
is.close()
}
0
Shawn Shroyer

L'instruction try-with-resources est une instruction try qui déclare une ou plusieurs ressources. Une ressource est un objet qui doit être fermé une fois que le programme est terminé. L'instruction try-with-resources garantit que chaque ressource est fermée à la fin de l'instruction. Tout objet implémentant Java.lang.AutoCloseable, qui inclut tous les objets implémentant Java.io.Closeable, peut être utilisé comme ressource.

0
Nada Touil

il a été ajouté à Java 7. Il s’appelle try with resources. La fonctionnalité d’instruction d’essai avec ressources a été introduite dans la version 7 de Java. L'instruction try avec ressource est une instruction try qui déclare une ou plusieurs instructions. Une ressource est un objet qui doit être fermé une fois que le programme est terminé.

Avant Java 7, nous utilisions enfin block pour fermer les ressources que nous avions utilisées dans notre programme. Enfin, nous devons fermer manuellement toutes les ressources que nous avons utilisées dans notre programme ..__ Pour plus d’informations, visitez try avec ressources .

0
Aakash Garg