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());
}
}
Здесь у меня есть два члена String в классахреализующий интерфейс Foo
.Первая varName
содержит имя переменной второй String, вторая строковая переменная содержит данные.
В интерфейсе с использованием отражения я сначала извлекаю имя переменной, хранящейся в varName
, а затем с помощью этого извлекаю значение secondСтрока.