Стандартные интерфейсы - PullRequest
8 голосов
/ 19 мая 2010

Я уже некоторое время использую Java, и я постоянно слышу об интерфейсах, таких как Cloneable, Iterable и других X- able s.

Мне было интересно, есть ли где-нибудь список всех этих и, что более важно, - какие из них вы регулярно используете изо дня в день?

Например, я читал, что Cloneable считается плохо написанным и не используется широко.

Ответы [ 8 ]

10 голосов
/ 19 мая 2010

Из документации 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

Я использую Cloneable, Comparable, Iterable, Runnable и, конечно, Throwable : -)

5 голосов
/ 19 мая 2010

Интерфейсы, которые вы, скорее всего, реализуете:
java.lang.Comparable
java.lang.Runnable
java.io.Serializable

Интерфейсы, для которых вы, скорее всего, вызываете методы, но не реализуете сами:
java.lang.Appendable (StringBuffer / StringBuilder / Writers)
java.lang.CharSequence (String / StringBuffer / StringBuilder)
java.lang.Iterable (Коллекции, явно или с for Blah blah : List<Blah>)
java.lang.Readable (Читатели)
java.io.Closeable (потоки)
java.io.Flushable (потоки)
java.util.Collection (Коллекции)
java.util.Deque (Коллекции)
java.util.List (Коллекции)
java.util.Map (Коллекции)
java.util.Set (Коллекции)

Интерфейсы, которые, скорее всего, взорвутся вам в лицо:
java.lang.Cloneable

Редактировать: Упс, Throwable не интерфейс.

Обычно лучше написать конструктор копирования, чем использовать метод clone().

4 голосов
/ 19 мая 2010

Вот список всех * классов и интерфейсов в Java. Лишь немногие действительно широко используются: я бы добавил Comparable и Runnable в ваш список.

$ 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
1 голос
/ 19 мая 2010

В javadocs библиотеки Java есть список всех интерфейсов - перейдите по ссылке tree и найдите раздел «Иерархия интерфейсов».

1 голос
/ 19 мая 2010

Вы правы. Cloneable и чтобы частично ответить на ваш вопрос, я бы никогда не воспользовался бы им Для получения дополнительной информации прочитайте это интервью с Джошуа Блохом.

0 голосов
/ 19 мая 2010

Существует множество интерфейсов, так же как и множество классов, перечислений и исключений. Если вы просто посмотрите на интерфейсы изолированно, вы не увидите полную картину. Некоторые интерфейсы - это существительные, превращенные в прилагательные (-able), а другие нет - и разделение так же важно в английском, как и любое техническое различие.

Вероятно, лучше исследовать ту область, которую вы пытаетесь решить, а не изучать, какие интерфейсы доступны в JRE - большинство из них не будет иметь особого смысла, пока вы не будете иметь в виду конкретный проблемный сценарий, и посмотрите на них в контекст со своими сотрудниками.

Когда вы начинаете, начните с интерфейсов в пакете java.lang, затем java.io, java.util и, возможно, java.util.concurrent, это даст вам хорошее заземление, а затем посмотрите на конкретные области применения.

Удачи!

0 голосов
/ 19 мая 2010

Сравнимый - это тот, который я использую все время. Есть список: http://java.sun.com/j2se/1.5.0/docs/api/ но он ОГРОМНЫЙ. (Вам нужно прокрутить около 2/3 пути вниз по странице, чтобы добраться до дерева интерфейса.

0 голосов
/ 19 мая 2010

Runnable - это тот, который я использую больше всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...