sách gpt4 ai đã đi

Java Generics: Danh sách<对象>, Danh sách

In lại Tác giả: IT Lao Gao Thời gian cập nhật: 2023-10-28 13:51:04 33 4
mua khóa gpt4 Nike

Có ai có thể giải thích sự khác biệt giữa các loại sau đây một cách chi tiết nhất có thể không?

Danh sách
Danh sách<đối tượng="">
Danh sách

Để tôi nói cụ thể hơn nhé. Khi nào tôi muốn sử dụng

// 1 
public void CanYouGiveMeAnAnswer(Danh sách l) { }

// 2
public void CanYouGiveMeAnAnswer(Danh sách<đối tượng=""> l) { }

// 3
công khai void CanYouGiveMeAnAnswer(Danh sách l) { }

1 Câu trả lời

Như các bài đăng khác đã chỉ ra, bạn đang hỏi về một tính năng của Java có tên là generic. Trong C++, đây được gọi là mẫu. Tính năng này trong Java thường dễ sử dụng hơn trong C++.

Hãy để tôi trả lời câu hỏi của bạn theo chức năng (nếu điều đó không quá khiếm nhã cho một cuộc thảo luận hướng đối tượng).

Trước khi có lớp chung, đã có các lớp cụ thể như Vector.

Vector V = vector mới();

vectơ chứa bất kỳ đối tượng nào bạn cung cấp cho chúng.

V.add("Đây là một phần tử");
V.add(số nguyên mới(2));
v.add(bảng băm mới());

Họ thực hiện điều này bằng cách chuyển đổi tất cả các giá trị được gán cho nó thành một Đối tượng (gốc của tất cả các lớp Java). Khi bạn cố gắng lấy một giá trị được lưu trữ trong Vector, bạn cần phải chuyển đổi giá trị trở lại nguyên bản lớp (nếu bạn muốn làm điều gì đó có ý nghĩa với nó).

Chuỗi s = (Chuỗi) v.get(0);
Số nguyên i = (Số nguyên) v.get(1);
Bảng băm h = (Bảng băm) v.get(2);

Vật đúc nhanh bị cũ. Không chỉ vậy, trình biên dịch cũng sẽ cảnh báo bạn về các lệnh ép kiểu không được kiểm tra. Vấn đề cấp bách nhất với các chuyển đổi như thế này là người dùng Vector phải Thời gian biên dịch Cần phải biết loại giá trị của nó để chuyển đổi nó một cách chính xác. Đây có thể là vấn đề nghiêm trọng nếu trình sản xuất Vector và trình tiêu thụ Vector hoàn toàn tách biệt với nhau (tương tự như nhắn tin RPC).

Nhập thuốc chung chung. Generics cố gắng tạo ra các lớp có kiểu dữ liệu mạnh để thực hiện các hoạt động chung.

ArrayList aList = new ArrayList();
aList.add("Một");
Phần tử chuỗi = aList.get(0); // không cần ép kiểu
System.out.println("Đã có một: " + phần tử);

Mẫu thiết kếCuốn sách khuyến khích người đọc suy nghĩ theo hướng hợp đồng thay vì các loại hợp đồng cụ thể. Việc tách các biến khỏi các lớp triển khai của chúng là vấn đề khôn ngoan (và tái sử dụng mã).

Với suy nghĩ này, bạn có thể nghĩ rằng tất cả các đối tượng triển khai List đều phải thực hiện cùng một việc:thêm vào() , lấy() , kích cỡ()vân vân. Chỉ cần suy nghĩ một chút, bạn có thể hình dung ra nhiều cách triển khai các hoạt động List tuân thủ theo hợp đồng List theo nhiều cách khác nhau (ví dụ: MảngDanh sách ). Tuy nhiên, các kiểu dữ liệu mà các đối tượng này xử lý lại không liên quan đến các thao tác có thể được thực hiện trên chúng.

Tổng hợp tất cả lại, bạn thường sẽ thấy các loại mã sau:

Danh sách L = new ArrayList();

Bạn nên đọc câu này như sau "L là danh sách các đối tượng chuỗi". Khi bạn bắt đầu xử lý các lớp nhà máy, điều quan trọng là phải xử lý hợp đồng thay vì việc triển khai cụ thể. Các nhà máy sản xuất ra nhiều loại đối tượng khác nhau khi chạy.

Sử dụng thuốc generic khá dễ (hầu hết thời gian).

Một ngày nào đó, bạn có thể quyết định muốn triển khai lớp chung của riêng mình. Có thể bạn muốn viết một giao diện trừu tượng cơ sở dữ liệu mới giúp làm dịu sự khác biệt giữa các kho dữ liệu khác nhau. Khi bạn định nghĩa lớp chung này, bạn sẽ sử dụng Có vai trò như một trình giữ chỗ cho loại đối tượng sẽ được phương thức này vận hành.

Nếu bạn vẫn còn bối rối, hãy thử nghiệm lớp List chung cho đến khi bạn cảm thấy thoải mái. Sau đó, bạn có thể đi sâu hơn vào quá trình triển khai với sự tự tin hơn. Ngoài ra, bạn có thể xem mã nguồn của nhiều lớp List đi kèm với JRE. Đó chính là bản chất của mã nguồn mở.

Hãy nhìn vào Oracle/Sun tài liệu về thuốc generic .chúc vui vẻ.

Liên quan đến Java generics: List, List, List, 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/490091/

33 4 0
CNTT Lao Gao
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com