2009-02-23 12 views
8

quiero crear algunas clases contenedoras simples para una biblioteca de clases existente. Para que la sintaxis sea agradable de leer Y agradable de adivinar (a través de la finalización del código) me gustaría eliminar los métodos de java.lang.Object.¿Cómo puedo ocultar todos los métodos java.lang.Object desde la finalización del código?

El problema es que todas las cosas no atómicas en java heredan de Object y por lo tanto tienen estos métodos. Ya intenté crear la sintaxis del contenedor a través de enums e interfaces, sin éxito; porque enumera y interfaces también son java.lang.Objects.

java.lang.Object tiene nueve métodos que no quiero ver en la finalización del código de mis interfaces. Esto es lo que quiero quitar (rojo) y lo que quiero seguir (verde):

alt text http://ju.venile.de/upload/java-lang-object-methods.png

aquí es un código de ejemplo para crear agradables envolturas alrededor existente clases (Builder):

public interface IMySyntax{ 
    public IMySyntax myMethod1(); 
    public IMySyntax myMethod2(); 
} 

public class MyBuilder implements IMySyntax{ 
    public static IMySyntax build(){ return (IMySyntax) new MyBuilder() } 
    public IMySyntax myMethod1(){ /* do something */ return (IMySyntax) this } 
    public IMySyntax myMethod2(){ /* do something */ return (IMySyntax) this }  
} 

uso del nuevo código de contenedor debe tener este aspecto:

MyBuilder.build() 
     .myMethod1() 
     .myMethod2(); 

casting una this declaraciones del constructor para una interf ace reducirá la visibilidad del método, p. si el constructor implementa más de una interfaz. Todos los métodos java.lang.Object se mantendrán, desafortunadamente.

Si este método de ocultación fuera posible en Java (¿tal vez usando Annotations?), Podría crear una buena biblioteca que sea independiente de IDE (buen código de terminación en todas partes). Si no, entonces tal vez haya un truco para al menos el Eclipse IDE (¿quizás un complemento?) Que pueda ofrecer el método java.lang.Object oculto.

+1

Creo que es posible que desee limitar este alcance a un IDE en particular (como Eclipse). Estoy 99% seguro de que IntelliJ IDE hace esto de manera inmediata (es decir, pone primero los métodos más relevantes). –

Respuesta

26

para Eclipse 3.4, al menos, puede hacer lo siguiente:

1) Ir a Preferencias -> Java -> Apariencia -> Tipo Filtros 2) Haga clic en Agregar y entran java.lang.Object

Ahora en código ayudar, los métodos heredados directamente de java.lang.Object desaparecerán

+0

¡Thx! Si a nadie se le ocurre una respuesta basada en Java muy pronto, la aceptaré. – Juve

+0

Recomiendo este enfoque. También puede decirle a eclipse qué tipos de propuestas usar. –

+0

El problema es que si necesitaString por ejemplo, no lo tiene en absoluto. Existe la necesidad de una solución más sofisticada para hacerlos coincidir solo si escribió dos o más caracteres, o si pone el final de la lista y los grita de forma predeterminada o algo así. –

Cuestiones relacionadas