Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取常数的值_Java - Fatal编程技术网

Java 获取常数的值

Java 获取常数的值,java,Java,我有一个JavaEE项目,在这个项目中,我有很多对函数的调用,函数接收一个字符串,这个字符串存储在一个常量中,这个常量不一定在同一个文件中定义,它有时在一个单独的常量类中定义。我需要遍历项目中的所有类,并检索这些常量的值。这样做的明智方式是什么? 我考虑过使用反射并加载项目中的每个类(几百个),但我不确定这是否是最好的方法 提前感谢。因为您知道常量的所有名称,并且它们都在一个类(constants类)中,所以我建议只使用该类。如果常量都在一个类中,则不需要遍历其他所有类 您可以做的是将参数设置为

我有一个JavaEE项目,在这个项目中,我有很多对函数的调用,函数接收一个字符串,这个字符串存储在一个常量中,这个常量不一定在同一个文件中定义,它有时在一个单独的常量类中定义。我需要遍历项目中的所有类,并检索这些常量的值。这样做的明智方式是什么? 我考虑过使用反射并加载项目中的每个类(几百个),但我不确定这是否是最好的方法


提前感谢。

因为您知道常量的所有名称,并且它们都在一个类(constants类)中,所以我建议只使用该类。如果常量都在一个类中,则不需要遍历其他所有类

您可以做的是将参数设置为常量名称,并使用反射查看constants类(并且仅该类)以获取名称与参数匹配的所有常量的值

我需要检查项目中的所有类并检索这些常量的值

您不太可能需要这样做。您创建的字符串将是现有常量的
equals()
,您不应该假定它必须是同一个对象。您不应该对字符串使用
=
,因为这是一种糟糕的做法


但要逐字回答您的问题,您可以调用
String.intern()
,这将为您提供任何现有字符串常量的字符串引用。(或相同的引用,如果尚未定义为相同的引用)

我不确定是否完全理解,但基于您知道常量的位置及其名称的事实,您可以静态导入所有常量类,并对值执行任何操作:

public class Constants1 {
    public static final String A = "A";
    public static final String B = "B";
}
public class Constants12 {
    public static final String C = "C";
}
导入常量:

import static constants.Constants1.*;
import static constants.Constants2.*;

public class ConstantsProcessor {

    static String[] constants = {A,B,C};

}

字符串是存储在一个常量中,还是存储在多个常量中?每个字符串都存储在一个常量中,而这个函数只需要其中一个字符串,对吗?为什么需要检索所有常量值?不,我想生成一个列表,列出传递给这个函数的字符串的所有值可能我不清楚,但是有不止一个常量类,并且常量并不总是在常量类中定义的。我的想法是,我不知道常量是在哪里定义的(程序员在编写项目时没有遵循约定),在这种情况下,您有3种选择。您可以重构它,使所有常量都在一个类中;您可以使用ctrl+f查找所有常量,并将它们移动到一个类中,然后进行相应的重构。缺点是这可能需要相当长的时间。如果你这样做,我会先备份项目。您还可以使用ctrl+f查找直接在其中定义常量的类,并从中加载它。请注意,如果更改其位置,则必须更改所有引用。最后,你可以咬紧牙关,使用反射。非常耗时,但不需要更改引用。