2009-02-23 5 views
8

Je veux créer des classes wrapper simples pour une bibliothèque de classes existante. Pour rendre la syntaxe agréable à lire ET agréable à deviner (via l'achèvement du code) je voudrais supprimer les méthodes de java.lang.Object.Comment puis-je cacher toutes les méthodes java.lang.Object de l'achèvement du code?

Le problème est que toutes les choses non-atomiques dans Java héritent d'Object et ont donc ces méthodes. J'ai déjà essayé de créer la syntaxe wrapper via enums et interfaces, sans succès; car enums et les interfaces sont également java.lang.Objects. Java.lang.Object a neuf méthodes que je ne veux pas voir dans l'achèvement du code de mes interfaces. Voici ce que je veux supprimer (rouge) et ce que je veux garder (vert):

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

Voici quelques exemples de code pour créer des emballages agréables autour des classes existantes (modèle 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 }  
} 

Utilisation du nouveau code d'emballage devrait ressembler à ceci:

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

casting toutes this déclarations du constructeur à un interf as va réduire la visibilité de la méthode, par ex. si le constructeur implémente plus d'une interface. Toutes les méthodes java.lang.Object resteront malheureusement.

Si cette méthode de masquage était possible en Java (peut-être en utilisant Annotations?), Je pourrais créer une belle bibliothèque agnostique IDE (complétion de code sympa partout). Sinon, peut-être qu'il y a un truc pour au moins l'Eclipse IDE (peut-être un plugin?) Qui peut cacher java.lang.Object.

+1

Je pense que vous pourriez vouloir limiter cette portée à un IDE particulier (comme Eclipse). Je suis sûr à 99% que l'IDE IntelliJ le fait dès la sortie de la boîte (c'est-à-dire qu'il met les méthodes les plus pertinentes en premier). –

Répondre

26

Pour Eclipse 3.4 au moins vous pouvez effectuer les opérations suivantes:

1) Allez dans les Préférences -> Java -> Apparence -> Filtres Type 2) Cliquez sur Ajouter, et entrez java.lang.Object

maintenant dans le code aider, les méthodes héritées directement de java.lang.Object disparaîtront

+0

Thx! Si personne ne propose une réponse basée sur Java très bientôt, je vais accepter celle-ci. – Juve

+0

Je recommanderais cette approche. Vous pouvez également dire à éclipse quels types de propositions utiliser. –

+0

Le problème que si vous avez besoin de Strings par exemple, vous le manquez du tout. Il est nécessaire d'avoir une solution plus sophistiquée pour les faire correspondre seulement si vous avez tapé deux caractères ou plus, ou mettez la fin de la liste et les grisé par défaut ou quelque chose comme ça. –