Propertiesmengimplementasikan Map<Object, Object>- tidak Map<String, String>.
Anda mencoba memanggil konstruktor ini:
public HashMap(Map<? extends K,? extends V> m)
... dengan Kdan Vkeduanya sebagai String.
Tapi Map<Object, Object>bukan Map<? extends String, ? extends String>... itu bisa berisi kunci dan nilai non-string.
Ini akan berhasil:
Map<Object, Object> map = new HashMap<Object, Object>();
... tapi itu tidak akan berguna bagi Anda.
Pada dasarnya, Propertiesseharusnya tidak pernah dijadikan subclass dari HashTable... itulah masalahnya. Sejak v1, itu selalu dapat menyimpan kunci dan nilai non-String, meskipun itu bertentangan dengan maksudnya. Jika komposisi telah digunakan sebagai gantinya, API hanya bisa bekerja dengan kunci / nilai string, dan semuanya akan berjalan dengan baik.
Anda mungkin menginginkan sesuatu seperti ini:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, bahkan hal-hal yang bukan string - bahkan kunci yang bukan string.