我想将类的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。
答案 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的值。