Jestem świadomy, jaki jest interfejs znacznika i kiedy musimy go użyć. Jedno pytanie wciąż nie jest dla mnie jasne. Jeśli interfejs znacznika nie ma żadnej metody ani treści, jak działa w środowisku wykonawczym?Jeśli interfejs znacznika nie ma żadnych metod, jak to działa?
Odpowiedz
Interfejs znacznika nie "działa" jako taki. Jak sama nazwa wskazuje, po prostu oznacza klasę jako konkretny typ. Jakiś inny kod musi sprawdzić istnienie znacznika i zrobić coś na podstawie tych informacji.
W dzisiejszych czasach adnotacje często pełnią tę samą rolę, co wcześniej, w przypadku interfejsów znaczników.
Jedyną sensowną rzeczą, jaką możesz zrobić z nią to
if (instance instanceof MyMarkerInterface) {
...
}
interfejsy Marker można zastąpić adnotacji w wielu miejscach, jednak interfejsy marker może być nadal stosowany do
kompilacji kontrole czasu. Możesz mieć metodę, która musi przyjąć obiekt klasy z danym interfejsem (interfejsami) znacznika, np.
public void myMethod(MyMarkerInterface MMI);
Nie można mieć to skompilować sprawdzić czas korzystania sam adnotację.
BTW: Możesz mieć dwa interfejsy używając generycznych, ale dobre przykłady są rzadkie.
- Podstawy wsparcia zależne od interfejsu (interfejsów) do identyfikacji typu komponentu. jak OSGi.
EDYCJA: Używam tego dla interfejsu znacznika Listener. Słuchacz ma metody metod oznaczone adnotacjami, ale metody mogą mieć dowolną nazwę lub typ. Dodaje kontrolę czasu kompilacji do tego, co w przeciwnym razie byłoby łączem czysto wykonawczym.
public Component implements Listener {
@ListenerCallback
public void onEventOne(EventOne... eventOneBatch) { }
@ListenerCallback
public void onEventTwo(EventTwo eventTwo) { }
}
Twój 'myMethod' jest mniej lub bardziej bezużyteczny, ponieważ co można zrobić z interfejsem * marker *, który nie ma więcej metod niż' Object'? – Mot
@MikeL. Przejrzyj dokumentację 'java.lang.Cloneable' i' java.util.RandomAccess' dla "dobrych" przykładów (_good_ jak w _ zrobiłem to w ten sposób przed wprowadzeniem adnotacji_). – Feuermurmel
@Feuermurmel Nie będę liczyć Klonowalnego jako dobry przykład interfejsu znacznika, ponieważ nie jest jasne, dlaczego nie ma on metody 'public Object clone()'. –
Interfejs znacznika informuje JVM, że klasa jest oznaczona interfejsem znacznika w celu dodania funkcjonalności interfejsu znacznika. Podobnie jak implementacja Cloneable mówi JVM, że ta klasa implementuje Cloneable, a zatem JVM będzie musiała skopiować ją w sposób bitowy.
Interfejs znacznika w Javie to interfejsy bez pól i metod lub w prostym słowie pusty interfejs w java nazywany jest interfejsem znacznika. na przykład Serializowalny, Clonnable i Remote Interface. Służą do wskazywania sygnału lub polecenia kompilatorowi lub maszynie JVM. Może być również używany do klasyfikowania kodu. Możesz także napisać swój własny interfejs znaczników i użyć ich do logicznego podziału kodu. Możesz także zapisać dowolną operację przetwarzania wstępnego na tych klasach.
- 1. Dlaczego interfejs Serializable nie zawiera żadnych metod?
- 2. Espresso nie zapisuje żadnych zamiarów, jeśli nie ma przycisków
- 3. MySql wybierając domyślną wartość, jeśli nie ma żadnych wyników?
- 4. nie ma towarzyszącego wiązania - co to znaczy? Jak to działa?
- 5. Jak mogę wypełnić element div fill 100% width, jeśli nie ma obok niego żadnych innych elementów?
- 6. jQuery - Jeśli element ma klasę, wykonaj to
- 7. Jak uniknąć kompilacji Jenkinsa, jeśli nie uruchomiono żadnych testów?
- 8. Dlaczego parametr wpisu w Kotlin nie ma żadnych innych ograniczeń, jeśli jest ograniczony innym parametrem?
- 9. Czy Qt ma interfejs C?
- 10. "Konwertuj na najnowszą składnię Swift" łamie kompilację, nawet jeśli nie ma żadnych zmian.
- 11. Dlaczego Studio Android odbudowuje projekt tak wolno, nawet jeśli nie ma żadnych zmian w źródłach?
- 12. Interfejs API wyszukiwarki osób w Google+ nie zwraca żadnych elementów.
- 13. memory_limit: Jak to działa?
- 14. Co to naprawdę oznacza, że język programowania nie ma żadnych powiązań?
- 15. Czyszczenie elementu xdt, jeśli nie ma dzieci
- 16. Jeśli $ zmienna = 0 nie działa
- 17. Git Push nie działa, nie ma błędu
- 18. Błąd TF: Nie ma żadnych pozostałych zmian do sprawdzenia
- 19. Bootstrap 3 + typeahead.js 0.9.3. Pytaj, jeśli nie znaleziono żadnych wyników
- 20. Sprawdź coffeescript, jeśli nie ma w tablicy
- 21. jak działa netezza? jak to się ma do Hadoop?
- 22. Railsy 3 mailer nie działa i nie rejestruje żadnych błędów
- 23. Seler @Task nie działa z metod instancji
- 24. Tworzenie abstrakcji klasy bez żadnych czystych metod wirtualnych
- 25. Projekt XXX nie ma żadnych SDK GWT na drodze budowania
- 26. symfony: setHttpHeader() nie działa, header() ma
- 27. Co to jest funkcja, która nie wywołuje żadnych argumentów?
- 28. Jquery "jeśli to i jeśli to", zrób to
- 29. Czy metoda równań działa z obiektami? Jeśli tak to jak?
- 30. Interfejs JavaScript nie działa z Androidem 4.2
Witaj Dan, popraw mnie, jeśli moje zrozumienie jest złe. Jak sama nazwa wskazuje "znacznik", oznacza to, że jak tylko dowolna klasa implementuje interfejs znacznika, zakłada się, że w czasie wykonywania JVM użyje jakiegoś mechanizmu do zidentyfikowania tej klasy jako oznaczonej do implementacji interfejsu, takiego jak klonowanie. – Kamal
@ Dan, Ponieważ powiedziałeś "" Jakiś inny kod musi sprawdzić istnienie znacznika i zrobić coś na podstawie tych informacji. "., Czy możesz podać przykład/scenariusz dla tego samego, – Deepak
@Kamal Nie, a Interfejs znacznika nie ma specjalnego znaczenia dla JVM i sam w sobie nie daje żadnych dodatkowych funkcji. W przypadku Cloneable, po prostu informuje inny kod, że twórca tej klasy gwarantuje, że instancje są odpowiednio klonowalne. Cloneable jest prawdopodobnie dobrym przykładem niewłaściwego wykorzystania interfejsu znacznika.Interfejs powinien naprawdę wymusić udostępnienie publicznej metody klonowania. –