以前に似たような質問がされているのを見たことがありますが、受け入れられた回答は、別の質問 (IMO) に対する回答を提供しているように見えます。
会社に入社したばかりで、変更や修正を行う前に、すべてのテストに合格することを確認したいと考えています。私が発見した 1 つを除いてすべて修正しました。これは、(私にとって) 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;
}
問題のある行は 2 行目です。文字列でない場合は、null を使用します。この動作が望ましい/期待される理由がわかりません。コードはほぼ間違いなく私よりも有能な誰かによって書かれたので、それには正当な理由があると思います。誰でも説明できますか?私がばかげたことをした場合は、時間を節約して、それを教えてください! :-)
どうもありがとう