2012-12-16 31 views
13

Trong Java, chúng ta có các kiểu dữ liệu nguyên thủy và một loạt các lớp bao bọc cho chúng. Câu hỏi của tôi là khi sử dụng cái gì? Tôi biết rằng khi chúng ta cần tạo Bộ sưu tập, chúng ta sẽ cần phải sử dụng các lớp trình bao bọc, nhưng khác với các trường hợp cụ thể khác mà ở đó chúng ta nên sử dụng các lớp trình bao bọc?Thực tiễn tốt nhất: Sử dụng, lớp trình bao bọc hoặc loại dữ liệu nguyên thủy?

Ngoài ra, có phải người ta phải luôn sử dụng các loại dữ liệu nguyên thủy trừ khi thực sự cần thiết không?

Ví dụ nếu tôi đang tạo ra một lớp có một số nguyên và một thuộc tính boolean:

Class MyClass { 
    ... 
    private Integer x; 
    private Boolean y; 
    ... 
} 

HOẶC

Class MyClass { 
    ... 
    private int x; 
    private boolean y; 
    ... 
} 

Mà trong số họ nên được sử dụng thường xuyên hơn? Và trong những tình huống nào khác nên sử dụng?

Trả lời

20

Sử dụng loại nguyên thủy trừ khi bạn không còn lựa chọn nào khác. Thực tế là nó không nullable sẽ ngăn chặn nhiều lỗi. Và chúng cũng nhanh hơn.

Bên cạnh bộ sưu tập, các kiểu trình bao bọc thường được sử dụng để biểu diễn một giá trị nullable (ví dụ, đến từ cột có thể vô hiệu hóa cơ sở dữ liệu).

+0

Vì vậy, trừ khi tôi cần đại diện cho 'null' hoặc tôi cần sử dụng bộ sưu tập, tôi luôn sử dụng kiểu dữ liệu nguyên thủy, phải không? – Amar

+3

Có. Có thể có những trường hợp khác, nơi nó có thể là một ý tưởng tốt để sử dụng loại trình bao bọc, nhưng như một quy tắc chung, đó là ý tưởng. –

+0

@Amar Cũng xem xét chuyển sang C#, không có vấn đề gì cả. –

1

Các lớp bao bọc có thể khá hữu ích khi hệ thống của bạn tạo ra mức độ không chắc chắn phải được tính toán. Ví dụ bằng cách sử dụng Boolean trong một chương trình capture gói như wireshark, sẽ cho phép bạn truyền theo một giá trị null nếu bạn không thể xác định xem một gói đã được sửa đổi từ người gửi hay chưa. Cụ thể trong trường hợp khi bạn có thể xác định các thao tác gói khác.

3

Các lớp bao bọc là không thay đổi, và do đó không có phương thức setter.Every thời gian bạn muốn thay đổi giá trị của nó một đối tượng mới sẽ phải được tạo ra. Điều này sẽ tạo ra các đối tượng không cần thiết. Int nguyên thủy chỉ đại diện cho các bit của số. Bạn không tạo bất kỳ đối tượng mới nào. Vì vậy, tôi sẽ đề nghị sử dụng nguyên thủy khi không sử dụng các bộ sưu tập.

+0

mã ở trên cho thấy không có CUỐI CÙNG vì vậy không có gì ở đây là bất biến – NikkyD

+0

Nhưng lớp Integer là một lớp cuối cùng và không thể thay đổi. – rabz100

5

this article nói về lớp wrapper, họ nói:

Các lớp wrapper trong Java API phục vụ hai mục đích chính:

1- Để cung cấp một cơ chế để “quấn” giá trị nguyên thủy trong một đối tượng để các nguyên thủy có thể được bao gồm trong các hoạt động dành riêng cho các đối tượng, như được thêm vào Bộ sưu tập hoặc được trả lại từ một phương thức có giá trị trả về đối tượng .

2- Để cung cấp một loại chức năng tiện ích cho nguyên thủy. Hầu hết các chức năng này liên quan đến các chuyển đổi khác nhau: chuyển đổi nguyên thủy đến và từ đối tượng String và chuyển đổi nguyên thủy và đối tượng String đến và từ các cơ sở khác nhau (hoặc cơ số), chẳng hạn như nhị phân, bát phân và thập lục phân.

+1

Hey, xin lỗi vì sự nhầm lẫn, đã chỉnh sửa câu hỏi :) Đối với C# tôi nên tạo một câu hỏi khác. – Amar

+0

Tôi thấy, nhưng bạn có thể đọc bài viết của liên kết "Lớp học Wrapper" "http://www.go4expert.com/forums/showthread.php?t=22183" để biết thêm thông tin về điều này trong Java –

+0

Bạn có thể muốn để trả lời câu hỏi này: http://stackoverflow.com/questions/13902506/best-practices-what-to-use-net-class-or-short-name – Amar

0

Khi sử dụng các kiểu nguyên thủy trong C# Tôi thích sử dụng bí danh C# trong khai báo và tên .NET khi truy cập các thành viên tĩnh. Nó chỉ là một sở thích cá nhân. Cả hai tên đều hoàn toàn tương đương nhau.

int x = Int32.Parse("123"); 
+0

Anh ta thay đổi câu hỏi của mình, anh ta hỏi về java. –

+0

Tôi rất xin lỗi vì sự nhầm lẫn mà tôi đã tạo bằng cách trộn cả hai. đây là câu hỏi cho C#: http://stackoverflow.com/questions/13902506/best-practices-what-to-use-net-class-or-short-name – Amar

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