繁体   English   中英

Java属性-int变为null

[英]Java Properties - int becomes null

尽管我之前曾看到过类似的问题,但似乎已接受的答案为另一个问题(IMO)提供了答案。

我刚加入一家公司,在进行任何更改/修正之前,我想确保所有测试都通过。 我已经修复了所有问题,除了一个,我发现这是由于Java中某些(对我而言)意外行为所致。 如果我将一个键/值对插入到一个值为int的Properties对象中,则我希望自动装箱能够起作用,并且getProperty将返回一个字符串。 但是,这不是正在发生的事情(JDK1.6)-我得到的是null。 我在下面写了一个测试课:

import java.util.*;

public class hacking
{
    public static void main(String[] args)
    {
        Properties p = new Properties();
        p.put("key 1", 1);
        p.put("key 2", "1");

        String s;

        s = p.getProperty("key 1");
        System.err.println("First key: " + s);

        s = p.getProperty("key 2");
        System.err.println("Second key: " + s);
    }
}

的输出是:

C:\Development\hacking>java hacking
First key: null
Second key: 1

在“属性”源代码中,我看到以下内容:

public String getProperty(String key) {
    Object oval = super.get(key);
    String sval = (oval instanceof String) ? (String)oval : null;
    return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}

冒犯的行是第二行-如果它不是字符串,则使用null。 我看不到任何需要/预期这种行为的原因。 几乎可以肯定,该代码是由比我更有能力的人编写的,因此,我认为这样做是有充分理由的。 谁能解释? 如果我做了一些愚蠢的事情,请节省时间,然后告诉我! :-)

非常感谢

这是表单文档:“因为Properties从Hashtable继承,所以put和putAll方法可以应用于Properties对象。强烈建议不要使用它们,因为它们允许调用方插入键或值不是String的条目。setProperty方法应该如果在包含非字符串键或值的“受损” Properties对象上调用store或save方法,则调用将失败;类似地,如果调用propertyNames或list方法,则调用将失败在包含非字符串键的“受损”属性对象上。

我修改了您的代码以根据文档使用setProperty方法,这会引发编译错误

package com.stackoverflow.framework;
import java.util.*;

public class hacking
{
    public static void main(String[] args)
    {
        Properties p = new Properties();
        p.setProperty("key 1", 1);
        p.setProperty("key 2", "1");

        String s;

        s = p.getProperty("key 1");
        System.err.println("First key: " + s);

        s = p.getProperty("key 2");
        System.err.println("Second key: " + s);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM