Tôi có một thức thành viên không tĩnh:Trong Java, một trường cuối cùng có thể được khởi tạo từ một trình trợ giúp hàm tạo không?
private final HashMap<String,String> myMap;
Tôi muốn khởi tạo nó sử dụng một phương pháp gọi là bởi các nhà xây dựng. Vì myMap là cuối cùng, phương thức "helper" của tôi không thể khởi tạo nó trực tiếp. Tất nhiên tôi có các tùy chọn:
Tôi có thể triển khai mã khởi tạo myMap trực tiếp trong hàm tạo.
MyConstructor (String someThingNecessary)
{
myMap = new HashMap<String,String>();
myMap.put("blah","blahblah");
// etc...
// other initialization stuff unrelated to myMap
}
Tôi có thể có phương pháp trợ giúp của tôi xây dựng HashMap, trả về hàm tạo và sau đó gán hàm tạo cho myMap.
MyConstructor (String someThingNecessary)
{
myMap = InitializeMyMap(someThingNecessary);
// other initialization stuff unrelated to myMap
}
private HashMap<String,String> InitializeMyMap(String someThingNecessary)
{
HashMap<String,String> initializedMap = new HashMap<String,String>();
initializedMap.put("blah","blahblah");
// etc...
return initializedMap;
}
Phương pháp # 2 là tốt, tuy nhiên, tôi có thể cho phép phương pháp trợ giúp trực tiếp thao tác với myMap. Có lẽ một công cụ sửa đổi cho biết nó chỉ có thể được gọi bởi hàm tạo?
MyConstructor (String someThingNecessary)
{
InitializeMyMap(someThingNecessary);
// other initialization stuff unrelated to myMap
}
// helper doesn't work since it can't modify a final member
private void InitializeMyMap(String someThingNecessary)
{
myMap = new HashMap<String,String>();
myMap.put("blah","blahblah");
// etc...
}
Bạn có biết người trả lời câu hỏi của bạn sẽ làm gì không? Có, họ sẽ thử nó bằng cách mở Eclipse và sao chép-dán mã của bạn! :) – Simon
@Simon Câu hỏi của tôi là yêu cầu thay thế cho những gì tôi đã thử. Tôi tự hỏi nếu một người có kiến thức tốt hơn về ngôn ngữ đó hơn tôi có thể hướng dẫn tôi đến một từ khóa hoặc mô hình mà tôi không biết. – csj
câu trả lời là Không. Nguồn: Đặc tả ngôn ngữ Java 8.3.1.2 – mihi