我正在开发一个在运行时生成和编译类的应用程序。这有时会产生大量的生成代码。在我们的一个测试用例中,我从JVM收到一个错误:TestClass.java:83865:toomanyconstants就是这个。我看过其他关于类似错误的报告,但在那些情况下,错误消息提示常量池。但在这种情况下它不会。如果这意味着达到了JVM常量池的限制,这意味着什么?我的意思是,就Java代码而言,这些常量是什么样的?类方法?字段?文字?我没有静态或final方法,也没有字段。你能给我一些线索吗?编辑:将代码拆分为多个类已经在计划中。虽然不是因为这个确切的原因。我知道常量池的局限性,但我的疑问正是要进入的内容
我可以在接口(interface)中创建publicstaticfinal变量吗?我可以在这些文件中保留一些常用的常量值吗? 最佳答案 是的,你可以:publicinterfaceConstants{publicstaticfinalintZERO=0;}但是,现在一般认为这不是一个好主意。如果接口(interface)也有真正的目的并没有那么糟糕,并且常量很可能被大多数实现使用...但是引入一个接口(interface)只是使获取常量变得更容易实际上是对接口(interface)目的的滥用。(这就是过去经常发生的事情。)
这在项目中可能没有主要用例,但我只是在尝试POC类型的项目,在其中我获取key代码,并使用它的值我想在屏幕上打印key名称。我想从编写switchcase中解脱出来,所以考虑通过反射(reflection)。有没有办法使用它的值获取接口(interface)名称的常量整数?KeyPressed(inti){stringpressedKeyName=getPressedKey(i);System.out.println(pressedKeyName);} 最佳答案 我能想到两个比使用反射更好的解决方案。任何体面的IDE都会为您自动填充
也许这是一个简单的基础问题有一个枚举publicenumTK{ID,GROUP,DATA,FAIL;}我可以得到订单号,例如ID=0,GROUP=2,DATA=3,FAIL=4吗?这是一种方法,但是很奇怪而且很长!=SpublicenumTK{ID(0),GROUP(1),DATA(2),FAIL(3);intnum;TK(intn){this.num=n;}publicintget(){returnnum;}};为了获取数字,所以我写了TK.ID.get()、TK.GROUP.get()等...我不喜欢这样有更好的方法吗?(C枚举,C宏..我想你们俩)谢谢
我使用XContentBuilder对象构建Json字符串。XContentBuilderbuilder=XContentFactory.jsonBuilder().startObject().field(Constants.OSM_ID,doc.getOsmId()).field(Constants.OSM_TYPE,doc.getOsmType()).field(Constants.OSM_KEY,doc.getTagKey()).field(Constants.OSM_VALUE,doc.getTagValue()).field(Constants.IMPORTANCE,doc.
这是关于Java字符串常量池的。在我的一个程序中,我正在解密数据库的密码并将其存储在一个字符串中。我听说Java字符串将存储在常量池中,并且它们不会在VM重新启动或加载字符串的类加载器退出时被销毁。如果是这种情况,我的密码将存储在字符串池中。我非常关心这个问题。有没有其他方法可以销毁这些文字或我能做的任何其他事情。请对此提出建议,问候,晴天。 最佳答案 这里有几个不同的问题。首先,术语“常量池”是指字符串和数字文字的类文件中非常具体的部分,或者是指从驻留在JVM中的类文件的这一部分生成的数据结构。密码不会存储在这里,除非它们是类文件
我刚刚阅读了一位更有经验的程序员编写的一些代码,我遇到了以下问题:publicclassConsoleFormatterextendsFormatter{privatestaticfinalMapPREFIXES;static{Mapprefixes=newHashMap();prefixes.put(Level.CONFIG,"[config]");prefixes.put(Level.FINE,"[debug]");prefixes.put(Level.FINER,"[debug]");prefixes.put(Level.FINEST,"[trace]");prefixes.pu
为了避免魔数(MagicNumber),我总是在我的代码中使用常量。在过去,我们曾经在无方法的接口(interface)中定义常量集,现在已经成为一种反模式。我想知道最佳做法是什么?我说的是全局常量。枚举是在Java中存储常量的最佳选择吗? 最佳答案 对于实际数字有意义而不仅仅是标签的魔数(MagicNumber),您显然不应该使用枚举。那么老款还是最好的。publicstaticfinalintPAGE_SIZE=300;当您只是标记某些东西时,您会使用枚举。enumDrink_Size{TALL,GRANDE,VENTI;}有时
我一直在阅读System库set和get方法的详细信息,但参数通常是字符串。自从包含enum以来,您是否认为使用String作为参数是不好的做法?更好的选择至少可能是publicfinalString,不是吗? 最佳答案 我认为枚举是比字符串更好的方法。它们是类型安全的,比较它们比比较字符串更快。作为Java1.5之前的替代方案,您可以使用JoshuaBloch在他的EffectiveJava一书中建议的类型安全枚举模式。对于类型安全的枚举,另请参阅http://www.javacamp.org/designPattern/enum
阅读SCJP书,我在第1章“自测”中发现了类似的内容:enumAnimals{DOG("woof"),CAT("meow"),FISH("burble");Stringsound;Animals(Strings){sound=s;}}classTestEnum{staticAnimalsa;publicstaticvoidmain(String[]args){System.out.println(a.DOG.sound+""+a.FISH.sound);//thefollowinglineisfrommeSystem.out.println(Animals.DOG.sound+""+A