Я использовал Java в течение некоторого времени, и я продолжаю слышать об интерфейсах такой как Cloneable
, Iterable
и другой X-able
s.
Я задавался вопросом, существует ли список где-нибудь всех их и что еще более важно - которые Вы регулярно используете ежедневный?
Например, я считал это Cloneable
считается плохо записанным и широко не используется.
Из документации 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 : -)
Интерфейсы, которые вы, скорее всего, реализуете, это :
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 ()
.
Вот список всех * доступных классов и интерфейсов в 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
В документации javadocs библиотеки Java есть список всех интерфейсов - перейдите по ссылке tree и найдите раздел «Иерархия интерфейсов».
Comparable - это тот, который я использую все время. Есть список: http://java.sun.com/j2se/1.5.0/docs/api/ , но он ОГРОМНЫЙ. (Вам нужно прокрутить примерно 2/3 страницы вниз, чтобы перейти к дереву интерфейса.
Вы правы. Cloneable
и чтобы частично ответить на ваш вопрос, я бы никогда не использовал его. Для получения дополнительной информации прочтите это интервью с Джошуа Блохом.
Существует множество интерфейсов, равно как и множество классов, перечислений и исключений. Если вы просто посмотрите на интерфейсы изолированно, вы не увидите полной картины. Некоторые интерфейсы - это существительные, преобразованные в прилагательные (-able), другие - нет - и разделение связано с тем, что разумно в английском языке, чем с какими-либо техническими различиями.
Вероятно, лучше исследовать область, которую вы пытаетесь решить, а не изучать, какие интерфейсы доступны в JRE - большинство из них не будет иметь особого смысла, пока вы не продумаете конкретный сценарий проблемы и не посмотрите на них в контекст со своими соавторами.
Вначале начните с интерфейсов в пакете java.lang
, затем java.io
, java.util
и, возможно, ] java.util.concurrent
, это даст вам хорошее основание, а затем изучит конкретные области применения.
Удачи!