Стандартные интерфейсы

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

Я задавался вопросом, существует ли список где-нибудь всех их и что еще более важно - которые Вы регулярно используете ежедневный?

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

8
задан Amir Rachum 18 May 2010 в 20:38
поделиться

8 ответов

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

10
ответ дан 5 December 2019 в 07:57
поделиться

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

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

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

Изменить: Упс, Throwable - это не интерфейс.

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

5
ответ дан 5 December 2019 в 07:57
поделиться

Вот список всех * доступных классов и интерфейсов в 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
4
ответ дан 5 December 2019 в 07:57
поделиться

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

1
ответ дан 5 December 2019 в 07:57
поделиться

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

0
ответ дан 5 December 2019 в 07:57
поделиться

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

0
ответ дан 5 December 2019 в 07:57
поделиться

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

1
ответ дан 5 December 2019 в 07:57
поделиться

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

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

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

Удачи!

0
ответ дан 5 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: