Propertiesnông cụ Map<Object, Object>- không phải Map<String, String>.
Bạn đang cố gọi hàm tạo này:
public HashMap(Map<? extends K,? extends V> m)
... với Kvà Vcả hai như String.
Nhưng Map<Object, Object>không phải là Map<? extends String, ? extends String>... nó có thể chứa các khóa và giá trị không phải chuỗi.
Điều này sẽ hoạt động:
Map<Object, Object> map = new HashMap<Object, Object>();
... nhưng nó sẽ không hữu ích cho bạn.
Về cơ bản, Propertieskhông bao giờ nên được tạo thành một lớp con của HashTable... đó là vấn đề. Kể từ phiên bản v1, nó luôn có thể lưu trữ các khóa và giá trị không phải Chuỗi, mặc dù điều đó là trái với ý định. Nếu thành phần đã được sử dụng thay thế, API có thể chỉ hoạt động với các khóa / giá trị chuỗi và tất cả sẽ tốt.
Bạn có thể muốn một cái gì đó như thế này:
Map<String, String> map = new HashMap<String, String>();
for (String key : properties.stringPropertyNames()) {
map.put(key, properties.getProperty(key));
}
Hashtable<Object, Object>, ngay cả những thứ không phải là chuỗi - ngay cả những khóa không phải là chuỗi.