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

时间:2014-09-17 13:21:31

标签: java prolog

有没有办法使java -DFOOBAR=foobar有效?无法检索属性值。如果我这样做java -Dfoobar=foobar没问题。 Java命令行属性名称是否必须始终以小写字母开头?到目前为止无法找到确定的答案或解决方法,以大写字母的形式使用属性名称。

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

$ java -DFOOBAR=foobar -Dfoobar=foobar

我从Prolog(JIProlog)的Java实现中访问属性值:

JIP:-invoke('java.lang.System', getProperty('java.lang.String'), ['foobar'], Value).
Yes
Value = foobar

JIP:-invoke('java.lang.System', getProperty('java.lang.String'), ['FOOBAR'], Value).
Yes
Value = []

P.S。它确实是一个JIProlog错误。使用Prolog(Lean Prolog)的另一个Java实现,访问FOOBARfoobar属性都没有问题:

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.

3 个答案:

答案 0 :(得分:2)

命令行上的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);

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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