有没有办法在接口中生成代码在类中实现它

时间:2018-06-01 18:37:51

标签: java eclipse formatter xcode-template

我想将类的getter和setter的所有摘要添加到我在该特定接口中实现的接口。我还想生成一个类似于类变量的final变量。在反序列化后,此变量可用作字符串来访问类变量。

例如:

public class Abc implements IAbc{

private String oneVariable;

 public String getOneVariable(){
    return oneVariable;
 }
}

使用接口IAbc实现上述类。 IAbc应包含以下代码:

public interface IAbc{
  public static final String ONE_VARIABLE = "oneVariable";

  public getOneVariable();

}

我已经尝试使用谷歌搜索解决方案,但无法获得任何解决方案。此代码生成后,类中的方法也应该有注释@Override。

1 个答案:

答案 0 :(得分:0)

TL; DR 这是一个有趣的编程挑战,但我发现在现实生活中很少使用它。
这里第一个字符串变量的名称是手头已知的,您可以直接将最终值存储在此,而不是存储第二个变量名称的循环方式。

如果理解正确,您正在尝试访问其名称将在另一个字符串变量中的类的(String)变量。这可以使用java反射。

此外,您希望将此代码放在一个接口中,以便可以在实现它的所有类中(重新)使用它。

import java.lang.reflect.Field;

interface Foo {

    public default String getStringVar() 
            throws NoSuchFieldException, IllegalAccessException {
        // get varName
        Class thisCls = this.getClass();
        Field varNameField = thisCls.getField("varName");
        String varName = (String) varNameField.get(this);

        // get String variable of name `varName`
        Field strField = thisCls.getField(varName);
        String value = (String) strField.get(this);

        return value;
    }
}


class FooImpl1 implements Foo {
    public final String varName = "str1";
    public String str1 = "some value";
}

class FooImpl2 implements Foo {
    public final String varName = "str2";
    public String str2 = "some other value";
}

class Main {
    public static void main(String[] args) 
            throws NoSuchFieldException, IllegalAccessException {
        System.out.println(new FooImpl1().getStringVar());
        System.out.println(new FooImpl2().getStringVar());
    }
}

这里我在实现接口Foo的类中有两个String成员。第一个varName包含第二个String的变量名,第二个String变量包含数据 在使用反射的界面中,我首先提取存储在varName中的变量名,然后使用它提取第二个String的值。