Java getter和setter的Eclipse模板变量

Java getter和setter的Eclipse模板变量,java,eclipse,casting,getter,eclipse-templates,Java,Eclipse,Casting,Getter,Eclipse Templates,我有一个小问题。我正在尝试为Eclipse中的变量创建getter模板。我想在getter方法中做的是检查变量是否为null。如果它是空的,我想给它赋值。但是问题是我需要将方法的返回值强制转换为getter返回类型。我办不到。下面是我想要的代码: Integer someInt; Double someDoub; Long someLong; public Integer getSomeInt(){ if(someInt == null) someInt = (Integer) new

我有一个小问题。我正在尝试为Eclipse中的变量创建getter模板。我想在getter方法中做的是检查变量是否为null。如果它是空的,我想给它赋值。但是问题是我需要将方法的返回值强制转换为getter返回类型。我办不到。下面是我想要的代码:

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说返回类型未知。请帮忙


非常感谢您的时间。

这将完成您的工作:

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

Eclipse没有在getter/setter代码模板(即“生成getter和setter”工具使用的模板)中提供这样做的方法。“插入变量”列表上的变量是唯一受支持的变量

${return\u 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();
    }
}
公共类MyBean{
整数someInt;
双索梅杜布;
公共整数getSomeInt(){
如果(someInt==null)someInt=GeneratorUtil.createAndEvaluate();
返回someInt;
}
公共双getSomeDoub(){
如果(someDoub==null)someDoub=GeneratorUtil().createAndEvaluate();
返回someDoub;
}
}
公共类生成器util{
@抑制警告(“未选中”)
公共静态T createAndEvaluate(){
返回(T)新生成器()。评估();
}
}

您的
生成器
类是否使用某种类型的反射来确定要生成的对象的类型?

这是一个好主意,但正如所写的那样,这将不起作用,因为如果字段为null,则无法对其调用
getClass()
。您可以将
evaluate
的结果存储到一个临时
Object
变量中,然后对该变量调用
getClass()
,以执行cast.oops。。我完全错过了。。抓得好@matts。但是如果我们从
evaluate
创建temp obj并对其执行
getClass
,它将返回
Object
,而不是
Integer
噢,说得对。我认为对象的
getClass()
仍然会返回正确类型的
Class
对象。但是编译器仍然只知道
cast
方法正在返回一个
对象
,即使它在运行时确实返回了一个
整数
。我想那也不行……不,我没有使用反射。我有一堆POJO类,它们的名称与变量名相同。我给出的代码片段实际上并不是我真正拥有的,它只是为了简化问题。在我的例子中,“Generator”类根据变量的不同而不同,所有变量都实现了一个接口,该接口包含evaluate方法的签名。所以我不能有一个实用类。谢谢你的想法。@Mehmet Yesin:你能发布你的生成器类代码吗?这将帮助我们为你提供更合适的答案。我认为你想要实现的目标很难通过getter来实现template@MehmetYesin那么,您是希望getter模板放入正确的生成器类中,还是计划为每个getter遍历并写入正确的生成器?让我这样解释。有许多类(很多)表示一些数据。所有这些类都在实现evaluate方法并返回一个具体类型。整数、双精度、布尔值、长或字符串。在我的模板中,我实际上是说${field}=(RETURN_TYPE)new${field}.evaluate();因为我的类与变量名命名相同,这是对它们的部分封装。希望我解释得更清楚一点。很抱歉造成混淆,我创建了。是否可以将生成器界面修改为泛化?类似于
接口生成器{E evaluate();}
,因此每个生成器类将指定它生成的对象的类型,例如
类SomeIntGenerator实现生成器{public Integer evaluate(){return 0;}}