2010-05-18 18 views
7

He usado Java durante algún tiempo y sigo escuchando sobre interfaces como Cloneable, Iterable y otras X-able s.Interfaces estándar

Me preguntaba si hay una lista en alguna parte de todos estos y, lo que es más importante, ¿cuáles usa usted regularmente día a día?

Por ejemplo, he leído que Cloneable se considera mal escrito y no se usa ampliamente.

+2

tienen javadocs;) busque en los paquetes 'java.lang' y' java.util'. – Bozho

+0

Ejecutable más comúnmente utilizado –

+0

¿Debería ser Wiki de la comunidad? –

Respuesta

6

De los documentos de la 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 

utilizo Cloneable, comparable, Iterable, Ejecutable y por supuesto Throwable :-)

+0

Waaaait ... Throwable no es una interfaz. Yo también lo uso más a menudo de lo que probablemente sea necesario. Buena captura :) – Daniil

+0

Oooo ... Me perdí la * interfaz * parte ... Voy a actualizar la lista ;-) – aioobe

+0

actualizado. Esta es la lista de interfaces :-) – aioobe

0

Runnable es el que más uso.

+0

Normalmente extiendo el hilo. ¿Hay alguna diferencia además de no poder extender cualquier otra clase? – Puddingfox

+1

No, pero esa es una gran diferencia. OK, a veces usaré un 'Runnable' sin tenerlo directamente conectado a un' Thread'; eso en realidad es bastante útil (y es mejor llamar al método 'run' que' doIt'). Hacer eso con muchas instancias de 'Thread' sería muy costoso (no son objetos baratos, incluso antes de que comiences a ejecutarlos). –

+1

El uso de Runnable en vez de Thread separa lo que desea ejecutar de la forma en que desea ejecutarlo. Con thread - they're bound - ejecutas run() en un nuevo hilo. Con Runnable, tiene una gran cantidad de opciones: ejecute en el EDT con SwingUtilities.invokeLater, ejecute en un grupo de subprocesos con ExecutorService, ejecute un programa (usando Timer), etc ... – mdma

1

Eres re correcta. Cloneable y para responder en parte a su pregunta, yo no usarlo. Para obtener más información leer this interview con Joshua Bloch

3

he aquí una lista de todos los * clases capaces e interfaces en java Hay un sólo unos pocos que realmente están ampliamente utilizado:... yo añadiría Comparable y Runnable a su lista de

$ 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 Manera de mostrarnos a todos los que respondieron una línea +1 – Puddingfox

+0

Me gusta Cerrar y Flushable - hace que el código que solía tener que saber qué tipo de transmisión está tratando neutralmente desde JDK 1.5. – mdma

0

Hay un montón de interfaces, así como hay un montón de clases, enumeraciones, y excepciones. Si solo observa las interfaces de forma aislada, no verá la imagen completa. Algunas interfaces son sustantivos convertidos en adjetivos (-able), otros no, y la división se trata tanto de lo que es sensato en inglés como de cualquier distinción técnica.

Probablemente sea mejor investigar en el área que intenta resolver en lugar de buscar las interfaces disponibles en el JRE: la mayoría no tendrá mucho sentido hasta que tenga un problema específico en mente y las vea en contexto con sus colaboradores.

Como usted está comenzando, comience con interfaces en el paquete java.lang, entonces java.io, java.util, y posiblemente java.util.concurrent, esto le dará una buena base, y luego buscar en áreas específicas de aplicación.

¡Buena suerte!

1

Hay una lista de todas las interfaces en los javadocs de la biblioteca Java: siga el enlace tree y luego busque la sección "Jerarquía de interfaz".

3

las interfaces que es más probable para poner en práctica son:
java.lang.Comparable
java.lang.Runnable
java.io.Serializable

Interfaces que es más probable que llamar a métodos en sí mismo, pero no poner en práctica son:
java.lang.Appendable (StringBuffer/StringBuilder/Writers)
java.lang.CharSequence (String/StringBuffer/StringBuilder)
java.lang.Iterable (Colecciones, ya sea explícita o con for Blah blah : List<Blah>)
java.lang.Readable (lectores)
java.io.Closeable (Streams)
java.io.Flushable (corrientes)
java.util.Collection (colecciones)
java.util.Deque (colecciones)
java.util.List (colecciones)
java.util.Map (Colecciones)
java.util.Set (Colecciones)

interfaces que tienen más probabilidades de hacer estallar en la cara:
java.lang.Cloneable

Editar: Vaya, no Throwable de una interfaz.

Por lo general, es mejor escribir un Copy Constructor en lugar de utilizar un método clone().