cuốn sách gpt4 ai đã làm

Ma trận/băm đa chiều Java

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 22:32:50 30 4
mua khóa gpt4 Nike

Tôi có n lớp và chúng có được xếp chồng lên nhau hay không. Tất cả các lớp này đều mở rộng cùng một lớp (CellObject). Tôi biết nhiều lớp sẽ được thêm vào danh sách này và tôi muốn tạo ra một cách dễ dàng để thao tác "khả năng xếp chồng" ở một nơi.

Tôi đang nghĩ đến việc tạo một ma trận trong đó chỉ mục hàng là lớp ở cuối ngăn xếp và chỉ mục cột là lớp ở đầu ngăn xếp. Giá trị là true (hoặc 1) nếu bạn có thể xếp chồng phần trên xuống dưới, nếu không thì sai (0).

Tuy nhiên, đồng nghiệp của tôi đề xuất tạo n+1 phương thức có tên canStack. Một phương thức canStack chung sẽ mở một câu lệnh instanceof, hướng nó đến một trong n phương thức con. Mỗi phương thức con chỉ đơn giản trả lời câu hỏi liệu đối tượng trên cùng có thể tự xếp chồng lên trên đối tượng dưới cùng hay không.

Tôi nghĩ giải pháp của tôi thanh lịch/sạch sẽ hơn. Điều này có đúng không? Nếu vậy, tôi sẽ triển khai nó như thế nào?

Tôi đã thay đổi đối tượng thành lớp

câu trả lời hay nhất

Giải pháp của bạn sẽ ngắn hơn. Nhưng nó có một nhược điểm là nếu bạn phân lớp CellObject, bạn có thể quên thay đổi mảng của mình. Ngay cả khi bạn biết điều này sẽ xảy ra thì một ngày nào đó người khác có thể xử lý mã đó. Tuy nhiên, giải pháp của anh ấy cũng gặp phải vấn đề tương tự.

Đây là một ý tưởng hơi điên rồ, nhưng vì về cơ bản bạn đang nói về một số关于Điều tuyệt vời, vì vậy có vẻ như các công cụ siêu dữ liệu đã được sắp xếp hợp lý. Những gì bạn có thể làm là xác định một chú thích cho biết lớp nào có thể được xếp chồng lên lớp được chú thích và/hoặc lớp nào có thể được xếp chồng lên đó.

Như thế này:

@interface Có thể xếp chồng lên nhau {
Lớp[] stackables(); // Các lớp có thể xếp chồng lên nhau trên lớp được chú thích
Lớp[] columns(); //Các lớp này có thể xếp chồng lên nhau
}

Sau đó, bạn có thể tạo bộ xử lý chú thích sử dụng siêu dữ liệu này. Nó có thể tạo một tệp cấu hình mà bạn đọc trong thời gian biên dịch hoặc tạo một số mã soạn sẵn cho bạn. Bạn có thể tạo siêu dữ liệu, giống như JPA thực hiện đối với API truy vấn an toàn loại của nó, mô tả một số thông tin về lớp. Ngoài ra, bạn thậm chí có thể giữ các chú thích trong thời gian chạy để sử dụng sự phản chiếu nhằm tìm ra những gì có thể được xếp chồng lên nhau, tạm thời xây dựng mảng bạn muốn mà không cần phải mã hóa nó.

Nếu bạn sử dụng bộ xử lý chú thích, có thể an toàn hơn khi sử dụng mảng chuỗi có tên lớp chuẩn, vì đối tượng lớp có thể không có sẵn tại thời điểm biên dịch. Tính khả thi của nó cũng phụ thuộc vào việc tất cả các lớp CellObject có luôn trong cùng một lần chạy biên dịch hay không.

Sử dụng sự phản chiếu ở đây (có thể trong khi đảm bảo chú thích có RetentionType RUNTIME) dường như là một lựa chọn khả thi. Kiểm tra mảng; nếu phần tử tương ứng trống (điều này có thể được thực hiện bằng cách sử dụng giá trị boolean thay vì giá trị boolean), thực hiện thao tác phản chiếu và điền vào phần tử. Lần tới, bạn có thể tránh được chi phí phản chiếu và lười biếng điền vào mảng nếu cần.

EDIT: Quên đề cập, giải pháp của tôi cũng không buộc bạn phải cập nhật siêu dữ liệu. Ngoài ra, độ phức tạp có thể giảm nếu khả năng xếp chồng có tính bắc cầu. Nghĩa là A có thể xếp chồng lên B và B có thể xếp chồng lên C nghĩa là A có thể xếp chồng lên C.

Về ma trận/băm đa chiều Java, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/7895373/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress