En Java, me gustaría poder definir interfaces de marcador, que forzaron las implementaciones para proporcionar métodos estáticos. Por ejemplo, para el texto simple-serialización/deserialización me gustaría ser capaz de definir una interfaz que parecía algo como esto:Alternativas a los métodos estáticos en las interfaces para imponer la coherencia
public interface TextTransformable<T>{
public static T fromText(String text);
public String toText();
Desde interfaces en Java no pueden contener métodos estáticos, aunque (como se señaló en una número de otros mensajes/temas: here, here y here este código no funciona
lo que estoy buscando es sin embargo un poco de paradigma razonable para expresar la misma intención, es decir, métodos simétricos, uno de los cuales es estático. e implementado por el compilador. En este momento, lo mejor que podemos encontrar es algún tipo de objeto de fábrica estático o fábrica de genéricos, ninguno de los cuales es realmente satisfac conservador.
Nota: en nuestro caso, nuestro caso de uso principal es que tenemos muchos, muchos tipos de objetos de valor - enumeraciones u otros objetos que tienen un número limitado de valores, normalmente no tienen ningún estado más allá de su valor y que analizamos/analizamos miles de veces por segundo, por lo que realmente nos importa reutilizar instancias (como Float, Integer, etc.) y su impacto en el consumo de memoria/gc
¿Alguna idea?
EDIT1: Para aclarar cierta confusión - tenemos muchos, diferentes objetos se ajusten a este patrón -en realidad que estamos tratando de llegar a algo elegante para las personas que llaman con 2 semántica:
- Interfaces como contratos - la unidad de acceso (por ejemplo TextTransformable como una capacidad)
- que requieran una aplicación por las subclases/implementaciones (por ejemplo, los obligan a poner en práctica su propia transformación
En ter Muchos de nuestros pensamientos sobre Flyweight, Factories: ambas opciones hemos considerado, realmente estamos tratando de ver si podemos encontrar algo más elegante que confiar en JavaDoc diciendo "implementar una fábrica y delegarle llamadas, o exponerlo en la ubicación XXX por convención "
Sí, voy a editar arriba con la nota que hemos hablado sobre flyweight, aunque creo que estamos enfocados en la unidad de acceso (por ejemplo, como una interfaz de marcador y aplicación de contrato en la subclase) - ninguno de los cuales una fábrica o transformador estático parece que nos reciben) La razón principal por la que creo que no estamos contentos con la idea de fábrica es se siente poco elegante, aunque admitimos que algunas veces soportamos la inelegancia cuando no podemos encontrar algo elegante ... – jayshao
Sí, restringir irónicamente es lo que queremos;) Idealmente más como una mezcla, pero sin tener que usar un colaborador Objeto: aunque estoy de acuerdo, su resumen es similar a nuestro pensamiento actual y probablemente sea tan bueno como podamos presentarlo por el momento. – jayshao