Interfejs bez metod

Dlaczego Java wprowadza jakiś interfejs, który nie ma zdefiniowanych metod? Na przykład Cloneable, Serializable, Type i wiele innych.

Druga rzecz : w Class.class pakiecie jest jedna metoda zdefiniowana registerNatives() bez body i jest wywoływana z bloku statycznego, ale Class.class nie jest abstrakcyjna, ale jest final. Dlaczego? i dlaczego Java potrzebuje jakiejś metody bez body do wywołania ze statycznego bloku.?

Author: Not a bug, 2014-01-02

5 answers

Dlaczego Java wprowadza jakiś interfejs, który nie ma zdefiniowanych metod?

Nazywa się to Tagged lub Marker interface . Nie są one wykorzystywane do żadnych zastosowań ani operacji. Metody te są używane do oznaczania lub oznaczania klasy. Tak, że można określić, czy someclass jest dzieckiem tych klas.

O drugim pytaniu

Jeśli przyjrzysz się uważnie, zobaczysz, że deklaracja jest

 private static native void registerNatives();

Więc registerNatives jest metodą natywną.

Więc czym są metody natywne. If you see this so question

Metoda jest zaimplementowana w kodzie "natywnym". Czyli kod, który robi nie działa w JVM. Zazwyczaj jest napisany w C lub c++.

Natywne metody są zwykle używane do łączenia się z wywołaniami systemowymi lub biblioteki napisane w innych językach programowania.

Więc te metody są ładowane z kodów natywnych. Więc nie trzeba deklarować ciała metod, ale nadal nie są one abstrakcyjne, ponieważ mają one swoją implementację z kodów natywnych.

 14
Author: stinepike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:16

Znacznik interface jest używany jako znacznik do informowania kompilatora Javy o tym, że może dodać specjalne zachowanie do implementującej go klasy. Java marker interface nie posiada członków.

Celem Marker interfaces jest wymuszenie pewnego rodzaju funkcjonalności w klasach poprzez dostarczenie pewnej funkcjonalności klasie, jeśli implementuje interfejs markera.

Read Java Marker Interface Zobacz też Jakie jest zastosowanie markerów interface w Java?

 10
Author: rachana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:05

Dla pierwszego z nich prosisz o interfejs znacznika. Interfejsy znaczników z założenia nie powinny niczego dodawać do zachowania, a wspierać jedynie polimorficzną transformację obiektu. na przykład Serializable sprawia, że obiekt może przesyłać strumieniowo przez granice JVM. Interfejsy markerów są zgodne z filozofią "uniwersalnej substytucji typu".

Po drugie, prosisz o JNI. Java nie implementuje całego kodu w postaci Javy. Mam na myśli w klasach i kodach, które postępuj zgodnie ze składnią Javy. Czasami musisz przejść do natywnego API platformy, aby zaimplementować coś dla tego API. np. sockety i komunikacja TCP. To właśnie ta cecha Javy sprawia, że jest ona niezależna od platformy. Środowisko uruchomieniowe JVM jest zależne od platformy, ponieważ wykorzystuje natywne metody oparte na platformie i biblioteki dll or. so do implementacji i integracji z platformą. My jako programiści nazywamy wywołania API wysokiego poziomu Java SDK.

 2
Author: Nazgul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-02 07:23:12

Jedną z "czystych" cech języka programowania Java jest to, że nakazuje on oddzielenie interfejsów (pure behavior) od klas (state and behavior). Interfejsy są używane w Javie do określania zachowania klas pochodnych. Często można natknąć się na Interfejsy w Javie, które nie mają żadnego zachowania. Innymi słowy, są to tylko puste definicje interfejsu. Są one znane jako interfejsy znaczników. Niektóre przykłady interfejsów znaczników w API Java obejmują:

  • java.lang.Cloneable
  • java. io. Serializable
  • java.util.EventListener

Interfejsy znaczników są również nazywane interfejsami "tag", ponieważ znaczniki te oznaczają wszystkie pochodne klasy w kategorii na podstawie ich przeznaczenia. Na przykład można sklonować wszystkie klasy implementujące Klonowalny interfejs (tzn. można na nich wywołać metodę clone ()). Kompilator Javy sprawdza, czy jeśli metoda clone() jest wywołana na klasie, A klasa implementuje Klonowalny interfejs. Na przykład, rozważmy następujące wywołanie metody clone () w obiekcie o:

SomeObject o = new SomeObject();
SomeObject ref = (SomeObject)(o.clone());

Jeśli Klasa SomeObject nie implementuje interfejsu Cloneable (a Cloneable nie jest implementowana przez żadną z superklas, z których SomeObject dziedziczy), kompilator zaznaczy tę linię jako błąd. Dzieje się tak, ponieważ metoda clone() może być wywoływana tylko przez obiekty typu "Cloneable."Dlatego, mimo że Cloneable jest pustym interfejsem, służy on ważnemu cel.

 1
Author: Bipil Raut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-05 09:27:09
registerNatives()

Natywne metody są zaimplementowane w samym JVM. do czego służy metoda registerNatives ()?

Why Java need some method without body to be called from static block.?

Jest to wywołane z bloku statycznego, ponieważ musimy wywołać tę metodę, gdy klasy są ładowane, a nie gdy jej instancja jest tworzona.

 0
Author: Aniket Thakur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:26