2010-08-15 36 views
17

Tôi đang cố gắng sửa một lỗi trong một trong các chương trình mà tôi nghĩ có thể là do Hibernate tìm ra cách khởi tạo một thể hiện của đối tượng mà không gọi hàm khởi tạo mặc định (hoặc bất kỳ hàm nào khác).Có thể tạo một thể hiện của một đối tượng trong Java mà không cần gọi hàm tạo không?

+3

Bạn có thể đăng sự cố ban đầu thay vì giải pháp được giả định. –

+2

Hibernate sử dụng hàm tạo rỗng mặc định của các thực thể. Bạn đang đi sai đường. Hãy đăng sự cố của bạn để thay thế. –

Trả lời

23

Thực ra, có, có thể bỏ qua hàm tạo khi bạn khởi tạo một đối tượng, nếu bạn sử dụng objenesis để khởi tạo đối tượng cho bạn. Nó thực hiện thao tác bytecode để đạt được điều này.

Deserializing một đối tượng cũng sẽ bỏ qua hàm tạo.

Không thể thực hiện điều này bằng cách sử dụng sự phản chiếu.

7

Có, deserializing một đối tượng không gọi constructor của nó.

Điều đó nói rằng, tôi không thấy lý do tại sao ngủ đông sẽ tuần tự hóa một đối tượng, trừ khi có lẽ trong bộ nhớ cache cấp thứ hai.

6

Deserialization liên quan đến việc tạo các đối tượng mà không cần gọi một hàm tạo.

Có thể (ít nhất với Sun/Oracle JDK) để thực hiện việc này theo lập trình. Điều này được bao gồm trong "Creating Objects Without Calling Constructors", một ấn bản của The Java Specialists' Newsletter. Nó liên quan đến việc sử dụng các lớp học từ các gói sun.* do đó không phải là di động.

8

Chỉ cần hoàn thành hình ảnh: sử dụng phương pháp clone để tạo đối tượng mới cũng bỏ qua các nhà xây dựng.

+0

Với điều kiện là bản sao() được thực thi chính xác, tất nhiên. Có thể ghi đè lên bản sao hoạt động như một phương thức nhà máy không sử dụng super.clone(). (Trong khi super.clone() nên được sử dụng - không phải là hàm tạo) – DerMike

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