2010-03-22 44 views

Trả lời

7

Thật không may, không có cách nào đáng tin cậy để tạo bản sao sâu trên Vector đối tượng.

Chỉ cần đánh giá nhanh những gì tôi tin rằng "bản sao sâu" là: Bản sao sâu là bản sao không chỉ nội dung của bộ sưu tập (vectơ, trong trường hợp này) được sao chép, mà các đối tượng trong Vector được sao chép độc lập. Nói cách khác: Nếu vectơ V chứa A và bản sao (V ') của V được tạo, bản sao A (A') trong V 'không bị ảnh hưởng bởi bất kỳ thay đổi nào đối với A và ngược lại.

Thông thường, điều này sẽ được thực hiện bằng cách "nhân bản" một đối tượng. Thật không may, nếu bạn không có quyền kiểm soát đối tượng trong Vector, bạn không có cách nào hợp lý để sao chép chúng, đặc biệt là vì JavaME không sở hữu một giao diện Cloneable (theo như tôi có thể tìm thấy). Tất nhiên, nếu bạn điều khiển các đối tượng, bạn có thể tạo giao diện Cloneable của riêng bạn để chỉ định phương thức clone() trả về một bản sao hoàn toàn độc lập của đối tượng. Quay lại đầu trang | Sau đó, bạn phải đảm bảo rằng Vector nhân bản đặc biệt của bạn chỉ chấp nhận các đối tượng thực hiện giao diện đó. Từ đó, nó khá dễ dàng (mã khôn ngoan) để bạn có thể tạo ra một Vector có thể sao chép chính nó.

+0

Than ôi, đó là điều tôi sợ. Cảm ơn. –

+0

Tôi có thể thực hiện một giao diện clonable, nhưng nó sẽ không được gần như nhanh như một cái gì đó bản địa để J2ME. –

2

Bạn sẽ cần sao chép nội dung của Vector bằng một vòng lặp.

Enumeration e = projects.elements(); 
while (e.hasMoreElements()) { 
    this.projects.addElement((Project) e.nextElement()); 
} 

Cần thêm thông tin, xem The Java Forum trang 2 trả lời 18, câu trả lời là có.

+0

Bản sao nông của mỗi phần tử. –

+0

@DanG nó là tốt nhất bạn có thể nhận được trong J2ME, Bạn thậm chí có bận tâm đọc các tài liệu Vector? http://en.wikipedia.org/wiki/Object_copy#Deep_vs._Shallow_vs._Lazy_copy nếu tôi đọc chính xác mã tôi đã đưa ra là một bản sao sâu, vì hai véc tơ là độc lập. –

+0

bản sao chép sâu đầy đủ sẽ tạo bản sao của từng phần tử con và mỗi phần tử con phụ, v.v ... xuống cây. Tại một điểm không nên tham chiếu đối tượng; luôn là bản sao của mỗi trường. Vì bạn đang sao chép các tham chiếu đối tượng của các phần tử, đây là một bản sao nông ở cấp đó. –

4

Vì bạn đã gắn thẻ này là BlackBerry chứ không chỉ J2ME nên được đề cập rằng có một lớp CloneableVector là một phần của các API BlackBerry. Nếu bạn đang cố gắng để dính vào J2ME nghiêm ngặt này sẽ được sử dụng ít. Tuy nhiên, nếu bạn chỉ nhắm mục tiêu BlackBerry, thì nó đáp ứng nhu cầu của bạn.

net.rim.device.api.util.CloneableVector documentation

+0

Đây chỉ là phiên bản 5.0. Hiện không có nhiều thiết bị trên 5.0. –

+0

Điều đó không đúng, ít nhất là 4,6 và tôi không cảm thấy muốn nhìn lại để kiểm tra khi nó xuất hiện lần đầu tiên. Tôi chỉ tình cờ trỏ đến tài liệu 5.0. – Fostah

+0

Tôi làm việc ở 4.3 ... –

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