Java命令行属性名称必须始终以小写开头?

Java命令行属性名称必须始终以小写开头?,java,prolog,Java,Prolog,有没有办法让java-DFOOBAR=foobar工作?无法检索属性值。如果我改为java-Dfoobar=foobar,没有问题。Java命令行属性名是否必须始终以小写开头?到目前为止,找不到一个确定的答案,也找不到一个将属性名称大写的解决方法 我使用Bash shell从命令行调用java: $ java -DFOOBAR=foobar -Dfoobar=foobar 我正在从Prolog(JIProlog)的Java实现访问属性值: 另外,这确实是一个JIProlog错误。使用Prolo

有没有办法让
java-DFOOBAR=foobar
工作?无法检索属性值。如果我改为
java-Dfoobar=foobar
,没有问题。Java命令行属性名是否必须始终以小写开头?到目前为止,找不到一个确定的答案,也找不到一个将属性名称大写的解决方法

我使用Bash shell从命令行调用java:

$ java -DFOOBAR=foobar -Dfoobar=foobar
我正在从Prolog(JIProlog)的Java实现访问属性值:

另外,这确实是一个JIProlog错误。使用Prolog的另一个Java实现(精益Prolog),访问
FOOBAR
FOOBAR
属性没有问题:

main ?- call_java_class_method('java.lang.System', getProperty(foobar), Result).
Result = foobar

No (more) answers.

main ?- call_java_class_method('java.lang.System', getProperty('FOOBAR'), Result).
Result = FOOBAR

No (more) answers.

我认为这与Java本身无关。我相信您正在使用的shell中的命令行解析器是负责的。您尝试过java-D“FOOBAR”=FOOBAR吗?

命令行上的String.getProperties和-D没有大小写限制

试一试下面的符文,它将帮助你确定你错在哪里。最有可能的解释是a)当您从命令行调用时有一个输入错误,2)或者代码中有一个输入错误

下面的代码将打印出检测到的每个属性及其值,以及FOOBAR/FOOBAR检查

    System.out.println( "FOOBAR="+System.getProperty("FOOBAR"));
    System.out.println( "foobar="+System.getProperty("foobar"));

    System.getProperties().list(System.out);

运行此代码时,请注意大多数属性名称都是小写。

在正常情况下。变量名的Java属性为小写字母,如:userName、ShowMessage,但也有特殊情况,考虑到某些有趣的英文首字母缩写(USA、XML等),JavaBean还允许以大写字母开头的属性变量名,但必须满足变量的前两个字母是全大写还是全小写“要求,例如:IDCODE ICcard IDCODE属性变量名称是合法的,但iC、ICcard、IDCODE属性变量名称是非法的。

您如何检查foobar的值?使用System getProperty方法。您做错了什么<代码>System.out.println(System.getProperty(“FOOBAR”)为我打印
foobar
。请注意,
“D”
不是属性名的一部分。它听起来可能很简单,但如果将属性名更改为大写,则必须在命令行参数和查询它的Java程序中对其进行更改。属性名称区分大小写。@PauloMoura提供了您用来测试它的代码,许多双眼睛比我的代码更好(请参阅我编辑的问题)。从您的回答来看,它看起来像是JIProlog内置谓词中的一个bug,该谓词提供了对Java API的访问。@PauloMoura很可能。还值得检查用于调用命令或启动prolog的线束。至少我们已经能够帮助您排除基本问题。从这里,我将在每个移交点转储如上所述的属性表,并查看这些属性是否如您所期望的那样过去。我会让有更多JIProlog经验的人在这里帮助你。我不是JIProlog的作者,但它最近变成了开源。我可能能够获得JIProlog源代码,并按照您的建议尝试查找bug。
    System.out.println( "FOOBAR="+System.getProperty("FOOBAR"));
    System.out.println( "foobar="+System.getProperty("foobar"));

    System.getProperties().list(System.out);