Clase interna dentro de una interfaz que implementa la misma interfaz, ¿qué estamos logrando con esto?
Mi pregunta:
Estaba viendo el código fuente de TextWatcher y no obtuve el concepto aquí. ¿Cuál era el punto de extender a NoCopySpan?
TextWatcher.java:
public interface TextWatcher extends NoCopySpan { public void beforeTextChanged(CharSequence s, int start, int count, int after); public void onTextChanged(CharSequence s, int start, int before, int count); public void afterTextChanged(Editable s); }
NoCopySpan.java:
package android.text; /** * This interface should be added to a span object that should not be copied into a new Spanned when performing a slice or copy operation on the original Spanned it was placed in. */ public interface NoCopySpan { /** * Convenience equivalent for when you would just want a new Object() for * a span but want it to be no-copy. Use this instead. */ public class Concrete implements NoCopySpan {} }
- Eventos de TextWatcher se están llamando dos veces
- AutocompleteTextView dinámico con ArrayAdapter y TextWatcher
- Espaciado de letras en EditText para Android
- Cómo enmascarar un EditText para mostrar el formato de fecha dd / mm / aaaa
- ¿Cómo utilizo AsYouTypeFormatter TextWatcher en la aplicación de Android?
- Android stackoverflow utilizando while loop
- Textwatcher no funciona en KitKat para el número como inputType
- ¿Cómo utilizar Single TextWatcher para múltiples EditTexts?
- Formatear el número de teléfono de EditText como tipos de usuario
- Los eventos de TextWatcher se disparan varias veces
- Android utiliza el observador de texto para evitar escribir caracteres especiales
- Android edittext onchange escucha
- Validación de EditText con TextWatcher
NoCopySpan
es sólo una interfaz de marcadores . De acuerdo con javadoc se utiliza para modificar el comportamiento de la rutina de copia de objetos Spanned
(se basa en el tipo de componentes). Por ejemplo, android.text.SpannableStringBuilder
utiliza dicha información de herencia para omitir los períodos de copiado durante la construcción.
Este enfoque tiene algunos inconvenientes, pero sigue siendo bastante común. La razón de la existencia de la clase Concrete
es proporcionar la manera conveniente de construir la realización en modo NoCopySpan
(o por defecto) de la interfaz NoCopySpan
.
En cuanto a la especificación de la interfaz NoCopyScan
, la clase interna que implementa la misma interfaz puede utilizarse como una implementación / representación por defecto de la interfaz en cualquier parte externa.
Una clase interna en una interfaz es tratada implícitamente como una clase interna estática. Podemos instanciar la clase interna de la interfaz como una clase interna estática y poner NoCopyScan
para usar. Por favor, encuentre un ejemplo sencillo que represente el uso de la implementación por defecto de la interfaz con la ayuda de la clase interna a continuación:
/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ interface NoCopy{ public void doStuff(); public class Conc { //Inner Class public int retStuff(){ return 2; } } // public void doStuff(){ // System.out.println("Overriding in inner class"); // } } class ConcOut { public int returnStuff(){ return 5; } public void doStuff(){ NoCopy.Conc innerObj = new NoCopy.Conc(); //Instantiating inner class //NoCopy.Conc innerObj = (new ConcOut()).new Conc(); System.out.println("overriding in outside class ConcOut "+ innerObj.retStuff()); // calling the method of inner class } } class Ideone { public static void main (String[] args) throws java.lang.Exception { // your code goes here ConcOut conObj = new ConcOut(); conObj.doStuff(); //ConcOut.Conc concInner = conObj.new Conc(); } }
- Cómo encontrar el dispositivo como LDPI MDPI HDPI o XHDPI
- Servicio no disponible al llamar a geoCoder.getFromLocation ()