Bạn cần phải thực hiện nó như thế này:
public class Foo {
public Foo() {
this(makeBar());
}
public Foo(Bar b) {
// ...
}
private static Bar makeBar() {
Bar b = new Bar();
b.setSomeData();
b.doSomethingElse();
return b;
}
}
Phương pháp makeBar
nên tĩnh, vì các đối tượng tương ứng với this
không có sẵn tại thời điểm bạn đang gọi phương pháp này.
Nhân tiện, cách tiếp cận này có lợi thế là nó không chuyển đối tượng Bar
được khởi tạo hoàn toàn tới Foo(Bar)
. (@ RonU lưu ý rằng cách tiếp cận của anh ta không. Điều đó tất nhiên có nghĩa là nhà xây dựng Foo(Bar)
của anh ta không thể giả định rằng đối số Foo
của nó ở trạng thái cuối cùng của nó. Điều này có thể là vấn đề.)
Cuối cùng, tôi đồng ý rằng phương pháp nhà máy tĩnh là một lựa chọn tốt cho phương pháp này.
Nguồn
2010-10-07 12:32:17
Điều này có thực sự trả lời thư trên hàm tạo thứ hai không? – RonU
* trả lời thư * ??? –
@RonU - IMO, câu trả lời của tôi trực tiếp giải quyết câu hỏi của OP. Nếu bạn không đồng ý, vui lòng giải thích lý do. –