[Java] Scènes qui ne peuvent pas être réaffectées (essentiellement définitives)

Gestion multi-exceptions

e est effectivement définitif.

    public static void main(String[] args) throws IOException{
        try{
            throw new IOException();
        }catch (RuntimeException | IOException e){
            e = new RuntimeException();  // Cannot assign a value to final variable 'e'
            throw e;
        }
    }

Cependant, lorsque vous interceptez une seule exception au lieu de plusieurs, vous pouvez réaffecter l'exception interceptée et ses sous-classes.


static class FooException extends Exception{}
static class BarException extends FooException{}

public static void main(String[] args) throws FooException{
        try{
            throw new FooException();
        }catch (FooException fe){
            fe = new FooException();
            fe = new BarException();
            throw fe;
        }
    }

Définir l'expression lambda

Dans l'exemple ci-dessous, les variables locales utilisées dans l'expression lambda sont effectivement finales, ce qui entraîne une erreur de compilation lors de la réaffectation.

public interface Greeting {
    void sayHi(String name);
}

String name = "Ken";
Greeting g = n -> System.out.println("Hi, " + name);
name = "Taro"; //★ Erreur de compilation ici
g.sayHi(name);

try-with-resources

Exemple JDBC qui n'est pratiquement pas définitif mais qui ne peut pas être réaffecté

        import java.sql.Connection;
        import java.sql.DriverManager;
        import java.sql.SQLException;

        Connection connection = null;
        try (connection = DriverManager.getConnection("url") { // unknown class "connection" 

        } catch (SQLException e) {
            e.printStackTrace();
        }

Au fait, c'est possible avec un try-catch normal

        try {
            connection = DriverManager.getConnection("url");
        } catch (SQLException e) {
            e.printStackTrace();
        }

Recommended Posts

[Java] Scènes qui ne peuvent pas être réaffectées (essentiellement définitives)
Java Stream ne peut pas être réutilisé.
Impossible d'installer Java sur Ubuntu 13.04
Notez que les propriétés système, y compris JAXBContext, ne peuvent pas être utilisées dans Java11
Code Java qui ne peut pas être utilisé depuis Kotlin (pour les sessions d'étude en interne)
Vérifiez avec Java / Kotlin que les fichiers ne peuvent pas être écrits en UAC sous Windows
[Solution] Java ne peut pas être installé sur Windows 10 + ATOK 2017
Pourquoi la comparaison de classe de type chaîne Java (==) ne peut pas être utilisée
La fonction modifiée de kotlin ne peut pas être appelée depuis java.
modificateur final java
Veuillez noter que Spring Boot + Tomcat 8.5.8 ne peut pas être utilisé!
Tomcat ne peut pas être démarré en raison d'un changement de version de Java
Ecrire une classe qui peut être ordonnée en Java Un petit mémo standard
[Java] Il semble que `0 <hoge <10` ne puisse pas être écrit dans l'expression conditionnelle de l'instruction ʻif`.