#Java 10 – var


Java 10 wprowadza mechanizm na wzór “dynamicznego typowania” za pomocą frazy var (z ang. local variable type inference). Nie jest to jednak słowo kluczowe! Ponadto nie oznacza to, że Java stała się językiem dynamicznie typowanym! Jest to język silnie typowany a wprowadzenie powyższego mechanizmu to tylko lukier składniowy. Kompilator jest w stanie wywnioskować typ zmiennej na podstawie tego co zostało do niej przypisane. Nowa funkcjonalność dotyczy jak zresztą sama nazwa wskazuje tylko zmiennych lokalnych.

O czym należy jeszcze pamiętać:

  • Wartość zadeklarowana z użyciem frazy var musi być od razu przypisana. Nie można przypisać wartości null do zmiennej (zakończy się to błędem: cannot infer type for local variable),
  • Bez problemu frazę var można używać w instrukcjach sterujących,
  • Fraza var nie może być używa jako nazwa interfejsu bądź klasy.

Przykład użycia poniżej:

public class MyClass {
    
    static class Log {
        public void print(){
            System.out.println("printLog");
        }
    }
    static class CustomLog extends Log {
        public void printCustomLog(){
            System.out.println("printCustomLog");
        }
    }
    
    public static void main(String args[]) {
      var log = new CustomLog();    
      log.printCustomLog();
      
       Class cls = log.getClass();
       System.out.println("The type of the object is: " + cls.getName());
    }
}

wynik:

printCustomLog
The type of the object is: MyClass$CustomLog

We wcześniejszych wersjach Javy zamiana w powyższym przykładzie frazy var na klasę Log zakończyłaby się niepowodzeniem:

public class MyClass {
    
    static class Log {
        public void print(){
            System.out.println("printLog");
        }
    }
    
    static class CustomLog extends Log {
        public void printCustomLog(){
            System.out.println("printCustomLog");
        }
    }
    
    public static void main(String args[]) {
      Log log = new CustomLog();    
      log.printCustomLog();
      
       Class cls = log.getClass();
       System.out.println("The type of the object is: " + cls.getName());
    }
}

wynik:

/MyClass.java:17: error: cannot find symbol
      log.printCustomLog();
         ^
  symbol:   method printCustomLog()
  location: variable log of type Log
1 error


Leave a comment

Your email address will not be published.


*