Por defecto Método en la interfaz - Java

vineeshchauhan:
import java.util.List;

public interface IEntityParam {

    public void validateParam(Object object);

    public default void validateParam(Object object,List<String> Str){
        validateParam(object);
    }
}

Supongamos que IEntityParames muy antigua interfaz extendido por muchas clases y necesito nuevo método en ella. He añadido un nuevo método en con otro parámetro. Pero mi aplicación por defecto no utiliza nueva lista de parámetros en su método predeterminado. Técnicamente, no hay ningún problema. Pero, ¿es correcto uso del método por defecto? O ¿Debo mantener este nuevo método a la clase específica, ya que no estoy usando el segundo parámetro en la aplicación por defecto.

Nota: La lista de cuerda que se suministra aquí se utiliza en una sola aplicación en este momento, pero se puede utilizar en otra aplicación en el futuro. No es muy específica y puede ser utilizado por otra aplicación también.

ernest_k:

Esto es probablemente un mal uso de los métodos predeterminados. Se conocen métodos predeterminados para facilitar la compatibilidad hacia atrás cuando las interfaces / contratos evolucionan con nuevos métodos, pero el problema en su caso es que no todas las IEntityParamimplementaciones se preocupan por la nueva versión del "contrato". Métodos predeterminados son conceptualmente parte del contrato de la interfaz.

La forma normal de hacer frente a su necesidad actual consiste en ampliar la interfaz:

public interface IEntityParam {
    public void validateParam(Object object);
}

public interface IEntityParamExtended extends IEntityParam {
    public default void validateParam(Object object,List<String> Str);
}

De esta manera, la clase que necesita el segundo método pondrá en práctica IEntityParamExtendedy proporcionar una implementación para ambos métodos; mientras que el resto de implemnetations IEntityParamno se verán afectados.

En el futuro, cuando IEntityParamExtendedes necesario promover a IEntityParam(es decir, cuando las nuevas formas método parte del IEntityParamcontrato), se puede utilizar un defaultmétodo para evitar forzar a todas las implementaciones existentes que desee cambiar y volver a compilar.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=228052&siteId=1
Recomendado
Clasificación