2012-06-08 5 views
4

У меня есть небольшой вопрос. Я пытаюсь создать шаблоны для getters для моих переменных внутри Eclipse. То, что я хочу сделать в моем методе getter, - проверить, является ли переменная нулевой или нет. Если это значение null, я хочу присвоить ему значение. Однако проблема в том, что мне нужно передать возвращаемое значение метода в тип возвращаемого значения. Я не мог справиться с этим. Вот код, который я хотел бы иметь:Переменная шаблона Eclipse для getter и setter

Integer someInt; 
Double someDoub; 
Long someLong; 

public Integer getSomeInt(){ 
    if(someInt == null) someInt = (Integer) new Generator().evaluate(); 
    return someInt; 
} 

public Double getSomeDoub(){ 
    if(someDoub == null) someDoub = (Double) new Generator().evaluate(); 
    return someDoub; 
} 

Это код, который я хочу сгенерировать. Вот что я напечатал в качестве шаблона:

if(${field} == null){ 
    ${field} = (${return_type}) new Generator().evaluate(); 
} 
return ${field}; 

Как только я печатаю это. Eclipse говорит, что return_type неизвестно. Пожалуйста помоги.

Большое спасибо за ваше время.

ответ

2

Eclipse, не дает способ сделать это в геттер/сеттер шаблонов кода (то есть те, что «методов получения и установки» использует инструмент). Переменные в списке «Вставить переменную» являются единственными, которые поддерживаются.

${return_type} доступен только для обычных шаблонов (т. Е. Типа, который вы можете использовать с помощью горячих клавиш для завершения кода).

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

public class MyBean { 
    Integer someInt; 
    Double someDoub; 

    public Integer getSomeInt(){ 
     if (someInt == null) someInt = GeneratorUtil.createAndEvaluate(); 
     return someInt; 
    } 

    public Double getSomeDoub(){ 
     if (someDoub == null) someDoub = GeneratorUtil().createAndEvaluate(); 
     return someDoub; 
    } 
} 

public class GeneratorUtil { 
    @SuppressWarnings("unchecked") 
    public static <T> T createAndEvaluate() { 
     return (T) new Generator().evaluate(); 
    } 
} 

использовать ли ваш Generator класса некоторого типа отражения, чтобы определить, какой тип объекта для генерации?

+0

Нет. Я не использую отражение. У меня есть куча классов POJO, которые называются такими же, как имена переменных. Фрагмент кода, который я дал, на самом деле не тот, который у меня есть, это просто для упрощения вопроса. В моем случае класс «Генератор» отличается в зависимости от переменной, все из которых реализуют интерфейс, содержащий подпись для метода оценки. Поэтому я не могу иметь класс утилиты. Благодарю вас за эту идею. –

+0

@Mehmet Yesin: can u post ur Код класса генератора? Это поможет нам предоставить вам более подходящий ответ. Я думаю, что то, чего вы пытаетесь достичь, сложно реализовать с помощью шаблона getter – Pranalee

+0

@MehmetYesin, так что вы хотите, чтобы шаблон getter помещал в правильный класс генератора, или вы планировали пройти и написать правильный генератор для каждого получателя? – matts

0

Это будет делать свою работу:

if(${field} == null){ 
     ${field} = ${field}.getClass().cast(new Generator().evaluate()); 
    } 
    return ${field}; 
+1

Хорошая идея, но, как написано, это не сработает, потому что если поле равно null, вы не можете называть 'getClass()' на нем. Вы можете сохранить результат из 'оценки' в временную переменную' Object', а затем вызвать 'getClass()' на этом, чтобы сделать трансляцию. – matts

+1

упс .. я полностью пропустил это .. хорошо поймал @matts. но если мы создадим temp obj из 'оценки' и сделаем' getClass' на нем, он вернет 'Object', а не' Integer' – Pranalee

+0

О, стреляйте, вы правы. Я думал, что объект 'getClass()' все равно вернет объект 'Class' для правильного типа. Но компилятор все равно будет знать, что метод 'cast' возвращает объект Object, даже если он действительно возвращает' Integer' во время выполнения. Думаю, это тоже не сработает ... – matts