Написание средства удаления сумматоров Java, шаблон кода метода для Eclipse - PullRequest
4 голосов
/ 06 марта 2012

Слишком много раз я сталкиваюсь с необходимостью писать методы сумматора / удаления для списков:

public void addSomething(Something something){
    somethings.add(something);
}

public void removeSomething(Something something){
    somethings.remove(something);
}

Если я правильно понял, шаблоны Eclipse могут поддерживать автозаполнение ... например,если у меня есть:

Vector<Something> somethings=new Vector<Something>();

, я бы хотел, чтобы шаблон добавил метод к автозаполнению Eclipse, и автоматически завершил бы метод whole :

public void addSomething(Something something){
    somethings.add(something);
}

когда я набираю " add " + ( Ctrl + Пробел ) ...

Любая идея, как сделать что-то вродеэто ... возможно, укажет мне материал для чтения, относящийся к этой теме.

** ОБНОВЛЕНИЕ **

Ну, это то, что у меня есть до сих пор:

public final void add${type:elemType(collection)}(${type} ${varName:newName(type)}) {
    ${collection}.add(${varName}); 
}

Вот проблема, хотя, если я наберу "add" + (Ctrl + Space):

На уровне класса, и коллекция объявлена ​​как поле, я получаю пустую переменную какcollection.

public final void addtype(type type) {
    collection.add(type);
}

На уровне метода, и коллекция объявляется как поле, я получаю пустую переменную как коллекцию.

public final void addtype(type type) {
    collection.add(type);
}

На уровне метода, а ссылка на коллекцию является локальной переменной метода, я получаю правильный синтаксис, но метод add находится внутри другого метода.

public void method(...) {
    public final void addSomething(Something something) {
        this.somethings.add(something);
    }
}

Что означает, что я не получаюссылка на уровне поля, как я могу получить его?

** ОБНОВЛЕНИЕ 2 **

Это также дает тот же результат:

public final void add${type:elemType(collection)}(${type} ${varName:newName(type)}) {
    ${collection:field(java.util.Collection)}.add(${varName}); 
}

public final void remove${type:elemType(collection)}(${type} ${varName:newName(type)}) {
    ${collection:field(java.util.Collection)}.remove(${varName}); 
}

Спасибо,

Адам.

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Я бы посоветовал вам использовать Source > Generate delegate methods, поэтому вам не нужно писать шаблон для каждого метода, который вы хотите сгенерировать.

Назначьте горячую клавишу для Generate delegate methods всякий раз, когда вы объявляете объект

List<Integer> integer = new ArrayList<Integer>();| <- your cursor

Нажмите горячую клавишу, Eclipse обнаружит текущий выбранный объект, а затем выведет список доступных для вас методов.

2 голосов
/ 20 мая 2012

Я наконец-то использовал следующее:

public final void add${type:elemType(collection)}(${type} ${varName:newName(type)}) {
    ${collection:field(java.util.Collection)}.add(${varName}); 
}

public final void remove${type:elemType(collection)}(${type} ${varName:newName(type)}) {
    ${collection:field(java.util.Collection)}.remove(${varName}); 
}

Я создаю это с помощью метода и сокращаю его до уровня класса ...:)

2 голосов
/ 07 марта 2012

Вы можете прочитать о доступных переменных шаблона в Справка Eclipse . Вы должны создать шаблон на основе существующих шаблонов в Eclipse, см. «Представление шаблонов» в Eclipse.

...