#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.


*


Ta strona wykorzystuje pliki cookie. Używamy informacji zapisanych za pomocą plików cookies w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu. Mogą też korzystać z nich współpracujące z nami firmy badawcze oraz reklamowe. Jeżeli wyrażasz zgodę na zapisywanie informacji zawartej w cookies kliknij na „akceptuję". Jeśli nie wyrażasz zgody, ustawienia dotyczące plików cookies możesz zmienić w swojej przeglądarce. kliknij po więcej informacji

Ta strona wykorzystuje pliki cookie. Używamy informacji zapisanych za pomocą plików cookies w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu. Mogą też korzystać z nich współpracujące z nami firmy badawcze oraz reklamowe. Jeżeli wyrażasz zgodę na zapisywanie informacji zawartej w cookies kliknij na „akceptuję". Jeśli nie wyrażasz zgody, ustawienia dotyczące plików cookies możesz zmienić w swojej przeglądarce.

zamknij