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 {} } 

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 elimino texto en EditText con TextWatcher? Cada vez que detecta una cadena y formatea su
  • ¿Cómo puedo hacer algo, 0.5 segundo después de que el texto cambió en mi EditText?
  • Cómo cambiar TextView texto en DataChange sin llamada atrás TextWatcher Listener
  • Los caracteres de cuenta con TextWatcher fallan en HTC longpress
  • Necesita ayuda para que un TextWatcher de Android funcione con datos de código de barras compuesto entrantes
  • Cómo manejar la tecla Intro usando TextWatcher en Android
  • Android TextWatcher.afterTextChanged vs TextWatcher.onTextChanged
  • EditText no se actualiza después de que se cambió el texto en TextWatcher
  • Diferencias entre TextWatcher 's onTextChanged, beforeTextChanged y afterTextChanged
  • Cómo limitar el texto en números sólo de 0-59 en Editar texto en Android?
  • Cómo dar formato a la entrada de EditText al escribir con separadores de miles (,) en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.