Java utilizând operatorul instanței cu o interfață

a.k.a. Caracteristicile utilizării operatorului instanței pentru a verifica implementarea interfeței obiect în limba Java. La urma urmei, sigur, cineva îi place mai mult titlurile lungi. )







Am descoperit un punct interesant despre implementarea operatorului de Java în Java, care este rar menționat.

Știm cu toții că încercările de a utiliza în caz de tipuri de operatori care nu aparțin aceleiași ierarhii de moștenire sunt șterse abrupt de compilator. De exemplu, următorul cod:

va duce la o eroare de compilare:

Dar, se pare, nu se întâmplă întotdeauna. Să înlocuim clasa din partea dreaptă a operatorului instanței cu un fel de interfață:

Destul de ciudat, în acest caz compilația este destul de reușită! Și, apropo, programul compilat este executat deloc fără probleme și scoate rezultatul "fals" în consola.







Încercați să nu vă grăbiți la concluzii, deoarece dacă ne rescriem exemplul după cum urmează:

atunci aceasta va duce din nou la o eroare de compilare! Aceasta este, practic, aceeași situație ca în cazul primului caz:

Funny, nu-i așa?

De fapt, întregul punct este că Stringul este clasa finală, spre deosebire de clasa noastră de clasă 1. În cazul în care clasa este declarată cu modificatorul final, compilatorul poate determina dacă clasa implementează orice interfață sau nu. În toate celelalte cazuri, compilatorul nu poate face acest lucru, deoarece interfața poate fi implementată de unul dintre descendenții acestei clase. Da, nu o justificare foarte convingătoare, în opinia mea, dar, totuși, "aceasta este viața, fiule".

Cred că cunoștințele despre astfel de comportament al operatorului de exemplu sunt utile pentru programatorii care se pregătesc să treacă la certificarea Java. Doar modul în care utilizarea unui operator de exemplu cu interfața a făcut obiectul uneia dintre întrebările dificile pe care le-am întâlnit în timpul pregătirii pentru OCPJP.







Articole similare

Trimiteți-le prietenilor: