0

我想动态读取字符串数组常量的值。

常量类有汽车的字符串数组。NeedValueOf 将动态附加常量名称,即常量。需要值

告诉我获取价值动态的方法,在获得对象后,我想要从该对象中获得价值。我想在我的方法中获取所有字符串数组值,以便我可以迭代和访问字符串汽车名称

Class Constants{
Private final static String[] car ={"Honda","Toyota", "Volkswagen"};
}
Class Main{
Public static void main(){
String needValueOf ="car";
Constants.class.getDeclaredFields(needValueOf).get(null);
}
}


It is providing : [Ljava.lang.String;@47483]
4

2 回答 2

0

由于数组是常量,只需将数组公开并按名称访问即可。

public class Constants{
    public final static String[] car ={"Honda","Toyota", "Volkswagen"};
}

public class Main{
    public static void main(String[] args){
        String[] arr = Constants.car; // access it by name
    }
}

不需要使用反射。99.99% 的情况下,反思是你能做出的最糟糕的选择。剩下的时间只是一个糟糕的选择。

如果数组不是常量,您可以提供 getter 方法并创建数组的防御性副本。但根据您的问题,这超出了范围。

更新

如果“动态”是主要重点,因为有许多数组常量,并且您想通过传递 a 来访问它们String,那么您只需将它们放在地图中即可。

public class Constants{
    private final static String[] cars ={"Honda","Toyota", "Volkswagen"};
    private final static String[] boats = {...};
    public static Map<String, String[]> myConstants = new HashMap<>();

    public Constants () {
        myConstants.put("cars", cars);
        myConstants.put("boats", boats);
    }
}

public class Main{
    public static void main(String[] args){
        String[] carsArr = myConstants.get("cars");
        String[] boatsArr = myConstants.get("boats");
    }
}

地图不应该public static。它甚至不应该是可修改的。所有的访问都应该通过方法来控制。这样,您可以控制在类外传递的内容(即地图的副本)。

于 2021-12-15T21:18:40.817 回答
0

[Ljava.lang.String;@47483只是toString在一个String[]

您正在正确检索该值。

要使用它,请执行以下操作:

public class App {

    private static final String[] car = {"Honda", "Toyota", "Volkswagen"};

    public static void main(String... args) throws NoSuchFieldException, IllegalAccessException {

        String needValueOf = "car";
        String[] xs = (String[]) App.class.getDeclaredField(needValueOf).get(null);
        System.out.println(xs);
        for (String x : xs) {
            System.out.println(x);
        }
    }
}

打印:

[Ljava.lang.String;@41629346
Honda
Toyota
Volkswagen
于 2021-12-15T23:57:59.670 回答