标准接口

我已经使用Java一段时间了,我一直听说过CloneableIterable和其他X- ableIterable

我想知道是否所有这些都有一个列表,更重要的是 – 你经常使用哪些日常用途?

例如,我已经读过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 (集合,显式或for Blah blah : List
java.lang.Readable (读者)
java.io.Closeable (Streams)
java.io.Flushable (Streams)
java.util.Collection (Collections)
java.util.Deque (Collections)
java.util.List (Collections)
java.util.Map (Collections)
java.util.Set (Collections)

最容易在脸上爆炸的界面:
java.lang.Cloneable

编辑:哎呀,Throwable不是界面。

通常,最好编写一个Copy Constructor而不是使用clone()方法。

这是java中所有*类和接口的列表。 只有少数几个被广泛使用:我将ComparableRunnable添加到您的列表中。

 $ jar tf $JAVA_HOME/jre/lib/rt.jar | grep [az]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 

你是对的。 Cloneable并部分回答你的问题,我永远不会使用它。 欲了解更多信息,请阅读Joshua Bloch的采访 。

有一个Java库的javadocs中所有接口的列表 – 按照树链接然后搜索“Interface Hierarchy”部分。

Runnable是我最常用的。

可比较是我一直使用的。 有一个列表: http : //java.sun.com/j2se/1.5.0/docs/api/但它是巨大的。 (您必须向下滚动约2/3的页面才能进入界面树。

有很多接口,就像有很多类,枚举和exception一样。 如果你只是孤立地看待接口,你将看不到完整的图片。 有些界面是名词形容词(-able),其他界面则不是 – 而且除了任何技术上的区别之外,对英语的合理性的划分也是如此。

最好在你试图解决的领域进行调查,而不是研究JRE中可用的接口 – 大多数在你考虑到特定的问题情况之前没有多大意义,并且在它们的上下文中查看它们。合作者。

在开始时,从java.lang包中的接口开始,然后是java.iojava.util ,以及可能的java.util.concurrent ,这将为您提供良好的基础,然后查看特定的应用程序区域。

祝你好运!