0

我想将类的 getter 和 setter 的所有抽象添加到我在该特定接口中实现的接口中。我还想生成一个类似于类变量的最终变量。反序列化后,该变量可以作为字符串访问类变量。

例如:

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。

4

1 回答 1

0

TL;DR这是一个有趣的编程挑战,但我发现它在现实生活场景中几乎没有用处。
这里第一个字符串变量的名字是事先知道的,你可以直接把最终的值存储在这个里面,而不是迂回的存储第二个变量的名字。


如果理解正确,您正在尝试访问名称将在另一个字符串变量中的类的(字符串)变量。这可以使用 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());
    }
}

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

于 2018-06-01T20:27:53.070 回答