假设我有一个这样的课程:
class ApplicationDefs{
public static final String configOption1 = "some option";
public static final String configOption2 = "some other option";
public static final String configOption3 = "yet another option";
}
我的应用程序中的许多其他类都在使用这些选项。现在,我只想更改其中一个选项,而仅部署已编译的类。但是,如果将这些字段插入到消费者类中,这将变得不可能,对吗?
是否有任何选项可以禁用内联编译时间常数?
您可以使用String.intern()获得所需的效果,但应注释您的代码,因为对此知之甚少。即
public static final String configOption1 = "some option".intern();
这样可以防止内联编译时间。由于它是指编译器将放入烫发中的完全相同的字符串,因此您无需创建任何其他内容。
作为替代方案,您始终可以
public static final String configOption1 = "some option".toString();
但是,这将不使用已编译的intern’d字符串,它将在旧gen上创建一个新字符串。没什么大不了的,而且可能更容易阅读。无论哪种方式,由于这有点奇怪,您应该注释代码以告知维护它的人您正在做什么。
编辑: 找到了另一个SO链接,该链接提供了对JLS的引用
是代码片段 如果是,和是编译时常量,还是指针本身就是(无论编译时意味着什么)? 如您所见,我通常对 数组及其在类/结构中的初始化感到有些困惑。请随意回答我的具体问题,还可以提及有关此主题的常见陷阱等。
我试图创建一个编译时常量,这样R8就可以在最终的生产apk中省略调试代码。我遇到了一个路障,不可分配给。 进一步检查后,我发现用wrapper。 这里的问题是: 为什么不能将静态最终布尔值指定给常量值
问题内容: 在关于反射的本教程中,它指出: […]因为泛型是通过类型擦除实现的,因此在编译过程中会删除有关泛型类型的所有信息 我的知识是使用泛型,以便在编译时编译器可以检查类型安全性。即失败快速方法。但是该链接提到类型擦除会在编译期间删除通用信息。 问题答案: 您引用的语句是正确的:编译器在编译过程中在内部使用通用类型信息,在处理源时会生成与类型相关的错误。然后,一旦完成验证,编译器将生成类型擦除
问题内容: 考虑这种情况: 通常,您希望编译器内联ONE和两个常量。但是,是否可以保证这种行为?您是否可以在运行时在类路径中部署不带Class1的Class2,并希望它在不考虑编译器的情况下工作,还是这是可选的编译器优化? 编辑:为什么这样做?好吧,我有一个常量,可以在应用程序的两个端之间共享(通过RMI的客户端和服务器),在这种特殊情况下,将常量放在只能位于该划分的一侧的类上会非常方便(因为从逻
问题内容: 为什么下面的代码无法编译? 我得到一个错误 main.go:12:常量2147483648溢出int 以上说法是正确的。是的,2147483648溢出int(在32位体系结构中)。但是移位操作将导致负值,即-2147483648。 但是相同的代码也可以工作,如果我将常量更改为变量并获得了预期的输出。 问题答案: 在常量和非常量表达式之间的评估存在差异,这是因为常量是精确的: 数字常数表
例如如下代码: SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); Date date = sdf.parse("abcd"); 这段代码会抛出ParseException,而它是编译时异常,为什么编译阶段不报错,运行时报错?