2012-06-19 29 views
15
Properties myProp = new Properties(); 
myProp.put("material", "steel"); 

Properties prop1 = new Properties(myProp); 

System.out.println(prop1.get("material") + ", " + prop1.getProperty("material")); 
// outputs "null, steel" 

là không nhận được tương tự như getProperty theo nghĩa là nó sẽ trả về các mục/thuộc tính của một đối tượng? Tại sao nó không trở lại 'thép' khi sử dụng nhận được?Sự khác nhau giữa "được' VS 'getProperty'

+0

Có lỗi cú pháp, bạn có thể muốn thay đổi 'đạo cụ' thành' prop1' – SomeKittens

Trả lời

21

get được thừa hưởng từ Hashtable, và được tuyên bố trở lại Object.

getProperty được giới thiệu bởi Properties, và được tuyên bố trở lại String.

Lưu ý rằng getProperty sẽ tham khảo các thuộc tính "mặc định" mà bạn có thể chuyển vào hàm tạo cho Properties; get thì không. Trong hầu hết các trường hợp, chúng sẽ trả về cùng một giá trị. Trong ví dụ này bạn đã đưa ra, bạn sử dụng một tính chất ủng hộ mặc định:

  • prop1 không trực tiếp chứa một mục nhập cho "material", do vậy tại sao get đang trở lại null.
  • myPropkhông chứa một mục nhập cho "material", vì vậy khi bạn gọi prop1.getProperty("material"), nó sẽ thấy rằng nó không có nó trực tiếp, và kiểm tra trong myProp thay vào đó, và tìm "steel" đó.
+0

Không có gì liên quan đến kiểu trả về. Nó chỉ có liên quan đến thực tế là anh ta đã * chỉ * thêm mặc định vào thuộc tính thứ hai và không có thuộc tính "hạng nhất" thực sự. Vì vậy, HashMap.get() sẽ không bao giờ tìm thấy bất cứ điều gì trong Properties thứ hai của mình. –

+0

@KevinWelker: Bạn có phủ nhận rằng kiểu trả về * là một sự khác biệt * giữa hai phương pháp? Đó là tất cả những gì tôi đã cố gắng nói trong hai bit đầu tiên. –

+0

Không, nó chỉ không trả lời câu hỏi của mình là tại sao có được trả về null. –

3

Một cái nhìn tại docs cho thấy get được thừa hưởng, và trả Object trong khi getProperty là thành viên của Properties và trả về String.

Dường như họ nên quay trở lại giống nhau, tuy nhiên từ docs một lần nữa:

Nếu khoá không tìm thấy trong danh sách khách sạn này, danh sách bất động sản mặc định, và giá trị mặc định của nó, đệ quy, sau đó được kiểm tra.

Vì vậy, tốt nhất nên sử dụng getProperty vì nó sẽ trả lại giá trị mặc định nếu không tìm thấy.

0

Đối tượng Properties thứ hai của bạn (props hoặc prop1?), Không có thuộc tính nào được thêm trực tiếp vào nó. Nó chỉ sử dụng myProp làm mặc định. Vì vậy, những giá trị đó không bao giờ được thêm vào sự ủng hộ HashMap. Properties.getProperty() không tìm thấy "material" trong HashMap sao lưu để nó có thể tìm trong các giá trị mặc định. Nhưng thừa kế HashMap.get()chỉ có vẻ trong phần sao lưu HashMap chứ không phải trong các giá trị mặc định mà bạn đã chuyển vào hàm tạo.

Các vấn đề liên quan