2010-05-18 13 views
7

Używam Java od pewnego czasu i słyszę o interfejsach, takich jak Cloneable, Iterable i innych X-able s.Standardowe interfejsy

Zastanawiam się, czy istnieje lista wszystkich tych i co ważniejsze - które z nich regularnie używasz na co dzień?

Na przykład, przeczytałem, że Cloneable jest uważany za źle napisany i nie jest powszechnie używany.

+2

mają javadocs;) spójrz na pakiety 'java.lang' i' java.util'. – Bozho

+0

Możliwe do uruchomienia Runnable najczęściej używane –

+0

Powinien być Community Wiki? –

Odpowiedz

6

Z dokumentacji API:

AccessibleStreamable 
AdapterActivatorOperations 
Callable 
Cloneable 
Closeable 
Comparable 
Compilable 
Destroyable 
Externalizable 
Flushable 
Formattable 
Invocable 
ItemSelectable 
Iterable 
JMXAddressable 
Joinable 
Pageable 
Printable 
Readable 
Referenceable 
Refreshable 
Runnable 
Scrollable 
Serializable 
StateEditable 
Streamable 
Transferable 
TypeVariable 
TypeVariable 
VM_TRUNCATABLE 

używam Cloneable, porównywalnych, iterable, Runnable i oczywiście Throwable :-)

+0

Waaaait ... Throwable nie jest interfejsem. Ja też używam go częściej niż prawdopodobnie konieczne. Fajny połów :) – Daniil

+0

Oooo .. Brakowało mi części * interfejsu * Aktualizuję listę ;-) – aioobe

+0

. Oto lista interfejsów :-) – aioobe

0

Runnable to ta, której używam najbardziej.

+0

Zazwyczaj przedłużam wątek. Czy jest jakaś różnica poza tym, że nie można rozszerzyć żadnej innej klasy? – Puddingfox

+1

Nie, ale to bardzo duża różnica. OK, czasami użyję 'Runnable' bez bezpośredniego podłączenia do' Thread'; to całkiem przydatne (i lepiej nazwać metodę 'run' niż' doIt'). Zrobienie tego przy wielu instancjach typu "Thread" byłoby bardzo kosztowne (nie są to tanie przedmioty, nawet przed uruchomieniem ich). –

+1

Użycie Runnable zamiast Thread oddziela to, co chcesz wykonać od tego, jak chcesz go wykonać. Z wątkiem - są one powiązane - uruchamiasz run() na nowym wątku. Z Runnable masz cały szereg opcji - wykonaj na EDT z SwingUtilities.invokeLater, wykonaj w puli wątków z ExecutorService, wykonaj do harmonogramu (używając Timer), itd ... – mdma

1

Jesteś poprawne re. Cloneable i częściowo odpowiedzieć na to pytanie, chciałbym nigdy go używać. Więcej Informacje czytać this interview Joshua Bloch

3

Oto lista wszystkich * klas zdolnych i interfejsów w Javie jest tylko kilka, które są bardzo szeroko stosowane... Chciałbym dodać Comparable i Runnable do listy

$ jar tf $JAVA_HOME/jre/lib/rt.jar | grep [a-z]able\.class | grep -v ^com | grep -v ^sun | sort 
java/awt/Adjustable.class 
java/awt/Container$WakingRunnable.class 
java/awt/datatransfer/Transferable.class 
java/awt/Dialog$WakingRunnable.class 
java/awt/ItemSelectable.class 
java/awt/print/Pageable.class 
java/awt/print/Printable.class 
java/awt/ScrollPaneAdjustable.class 
java/io/Closeable.class 
java/io/Externalizable.class 
java/io/Flushable.class 
java/io/Serializable.class 
java/lang/Appendable.class 
java/lang/Cloneable.class 
java/lang/Comparable.class 
java/lang/Iterable.class 
java/lang/ProcessEnvironment$Variable.class 
java/lang/Readable.class 
java/lang/reflect/TypeVariable.class 
java/lang/Runnable.class 
java/lang/Throwable.class 
java/rmi/activation/Activatable.class 
java/util/Collections$SelfComparable.class 
java/util/concurrent/Callable.class 
java/util/concurrent/Executors$PrivilegedCallable.class 
java/util/Formattable.class 
java/util/Hashtable.class 
java/util/Observable.class 
javax/accessibility/AccessibleStreamable.class 
javax/lang/model/type/TypeVariable.class 
javax/management/remote/JMXAddressable.class 
javax/naming/Referenceable.class 
javax/script/Compilable.class 
javax/script/Invocable.class 
javax/security/auth/Destroyable.class 
javax/security/auth/Refreshable.class 
javax/sql/rowset/Joinable.class 
javax/swing/JSlider$1SmartHashtable.class 
javax/swing/JTable$ThreadSafePrintable.class 
javax/swing/plaf/basic/BasicFileChooserUI$FileTransferHandler$FileTransferable.class 
javax/swing/plaf/basic/BasicTextUI$TextTransferHandler$TextTransferable.class 
javax/swing/plaf/basic/BasicTransferable.class 
javax/swing/RepaintManager$DisplayChangedRunnable.class 
javax/swing/Scrollable.class 
javax/swing/SwingWorker$DoSubmitAccumulativeRunnable.class 
javax/swing/TablePrintable.class 
javax/swing/text/DefaultStyledDocument$ChangeUpdateRunnable.class 
javax/swing/TransferHandler$PropertyTransferable.class 
javax/swing/undo/StateEditable.class 
org/omg/CORBA/portable/Streamable.class 
+2

unix ftw! ! ! ! – Claudiu

+1

@ataylor Sposób, aby pokazać wszystkim nam jedną linię odpowiadającą w górę +1 – Puddingfox

+0

Podoba mi się Closeable i Flushable - to sprawia, że ​​kod, który kiedyś musiał wiedzieć, jakiego rodzaju strumienia obsługuje neutralny strumień od JDK 1.5. – mdma

0

Istnieje wiele interfejsów, tak jak istnieje wiele klas, teksty stałe i wyjątki. Jeśli spojrzysz na interfejsy w izolacji, nie zobaczysz pełnego obrazu. Niektóre interfejsy są rzeczownikami wprowadzanymi w przymiotniki (-able) inne nie są - a podział dotyczy tyle, co sensowne w języku angielskim, niż jakiekolwiek techniczne rozróżnienie.

Prawdopodobnie najlepiej jest zbadać obszar, który próbujesz rozwiązać, zamiast sprawdzać, jakie interfejsy są dostępne w całym środowisku JRE - większość z nich nie ma większego sensu, dopóki nie masz określonego scenariusza problemu i nie spojrzysz na nie w kontekście ich współpracowników.

Jak jesteś początkującym, zaczynają z interfejsów w pakiecie java.lang, potem java.io, java.util i ewentualnie java.util.concurrent, to daje dobre uziemienie, a następnie spojrzeć na konkretne obszary zastosowań.

Powodzenia!

1

Istnieje lista wszystkich interfejsów w javadocs bibliotek Java - postępuj zgodnie z linkiem tree, a następnie wyszukaj sekcję "Hierarchia interfejsu".

3

interfejsów jesteś najprawdopodobniej do realizacji to:
java.lang.Comparable
java.lang.Runnable
java.io.Serializable

Interfejsy że jesteś najprawdopodobniej wywołać metody na siebie, ale nie realizować to:
java.lang.Appendable (StringBuffer/StringBuilder/Writers)
java.lang.CharSequence (String/StringBuffer/StringBuilder)
java.lang.Iterable (zbiory, zarówno bezpośrednio lub z for Blah blah : List<Blah>)
java.lang.Readable (czytniki)
java.io.Closeable (strumienie)
java.io.Flushable (strumienie)
java.util.Collection (zbiory)
java.util.Deque (zbiory)
java.util.List (zbiory)
java.util.Map (zbiorników)
java.util.Set (Kolekcje)

Interfejsy, które są najbardziej prawdopodobne, aby wysadzić w twarz:
java.lang.Cloneable

Edit: Ups, Throwable nie interfejs.

Zazwyczaj lepiej jest pisać Konstruktora kopii niż używać metody clone().