Как я могу скрыть все методы java.lang.Object от завершения кода? - PullRequest
8 голосов
/ 23 февраля 2009

Я хочу создать несколько простых классов-оболочек для существующей библиотеки классов. Чтобы сделать синтаксис удобным для чтения и хорошим для угадывания (посредством завершения кода), я бы хотел удалить методы java.lang.Object .

Проблема в том, что все неатомарные вещи в Java наследуются от Object и, следовательно, имеют эти методы. Я уже пытался создать синтаксис оболочки через перечисления и интерфейсы, но безуспешно; потому что перечисления и интерфейсы также java.lang.Objects .

java.lang.Object имеет девять методов, которые я не хочу видеть в завершении кода моих интерфейсов. Вот что я хочу удалить (красный) и что я хочу сохранить (зеленый):

альтернативный текст http://ju.venile.de/upload/java-lang-object-methods.png

Вот пример кода для создания красивых оболочек вокруг существующих классов (шаблон 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 }     
}

Использование нового кода оболочки должно выглядеть следующим образом:

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

Приведение всех операторов this к интерфейсу уменьшит видимость метода, например, если строитель реализует более одного интерфейса. К сожалению, все методы java.lang.Object останутся.

Если бы этот метод был скрыт в Java (возможно, с помощью аннотаций?), Я мог бы создать хорошую библиотеку, независимую от IDE (хорошее завершение кода везде). Если нет, то, возможно, есть хитрость по крайней мере для Eclipse IDE (может быть, плагина?), Который может обеспечить скрытие метода java.lang.Object.

1 Ответ

28 голосов
/ 23 февраля 2009

Для Eclipse 3.4, по крайней мере, вы можете сделать следующее:

1) Зайдите в Настройки -> Java -> Внешний вид -> Тип фильтров 2) Нажмите Добавить и введите java.lang.Object

Теперь в ассистенте кода методы, унаследованные непосредственно от java.lang.Object, исчезнут

...