Java là một ngôn ngữ lập trình được sử dụng rộng rãi nhờ vào tính năng cao cấp có lợi cho các nhà phát triển. Trong đó là khả năng xác định xem một đối tượng có phải là thể hiện của một kiểu cụ thể không. Trong bài viết này, trước tiên chúng ta sẽ tìm hiểu một số khái niệm nền tảng liên quan đến hệ thống kiểu của Java, trong đó Java instanceof là gì cách sử dụng nó thế nào cùng tìm hiểu nhé!
Tổng quan về Java instanceof là gì?
Các loại trong Java
Java được biết đến là hiện thân của một mô hình hướng đối tượng. Nó cho phép bạn xác định cấu trúc phân cấp lớp tùy ý, trong đó hầu như bất kỳ hai lớp nào cũng có mối quan hệ kế thừa, với một lớp là cha và một lớp là con. Cũng giống như một đứa trẻ sẽ kế thừa các thuộc tính từ cha mẹ của chúng.
Ví dụ Java instanceof là gì?
Chúng ta sẽ định nghĩa một lớp cơ sở có tên là Employee và định nghĩa hai lớp con có tên là EngineeringE Employee và MarketingErantyee, cả hai đều được kế thừa từ Employee. Điều này cho phép chúng tôi xác định phần lớn dữ liệu nhân viên và logic nghiệp vụ bên trong Nhân viên. Đồng thời, cũng giúp cho việc xác định dữ liệu và logic kinh doanh dành riêng cho các kỹ sư và tiếp thị trong các lớp tương ứng của họ: EngineeringE Employee và MarketingE Employee.
Ở ví dụ trên, chúng ta nói rằng myMarketingErantyee là một ví dụ của MarketingEFastee, nó cũng là một ví dụ của Employee. Đây là cách hệ thống kiểu của Java, bao gồm cả kế thừa và hoạt động.
Bây giờ bạn hãy tưởng tượng một tình huống mà chúng ta có một tham chiếu đến một đối tượng và tất cả những gì chúng ta biết lúc biên dịch đó là một Nhân viên. Tuy nhiên, hãy tưởng tượng rằng chúng ta cần xác định xem đó là một kỹ sư hay một người nào đó trong lĩnh vực tiếp thị để chúng ta có thể thực hiện hành động phù hợp cho cả hai. Vì các tình huống như thế này thường xuyên xảy ra, nên Java sẽ cung cấp toán tử instanceof.
Tìm hiểu về Toán tử instanceof
Toán tử instanceof tương đối đơn giản. Bạn sẽ sử dụng nó khi bạn có tham chiếu đến một đối tượng và bạn muốn biết liệu đối tượng đó có phải là một thể hiện của một kiểu cụ thể hay không.
Trong ví dụ trên, chúng tôi đã tham chiếu đến một Nhân viên, nhưng do các yêu cầu giả định, chúng tôi cần xác định xem đó cũng là Nhân viên Kỹ thuật hay Nhân viên Tiếp thị. Toán tử instanceof cho phép chúng tôi thực hiện quyết định này.
Lưu ý rằng với ví dụ này, chúng ta có thể đặt logic nghiệp vụ tiền lương như thế nào bên trong phương thức ProcessE Employee (), thay vì bên trong các phương thức cụ thể theo vai trò giả định khác nhau như ProcessEngineeringEprisee (), ProcessHRE Employee (), ProcessManagementE Employee (). Đây là một ưu điểm rất phổ biến trong lập trình hướng đối tượng: bạn thường có xu hướng viết ít mã hơn để thực hiện các tác vụ lặp đi lặp lại.
Gotcha: Kiểm tra một đối tượng rỗng
Hãy xem một gotcha. Khi bạn có một tham chiếu đến một đối tượng (đó là một thể hiện của một kiểu cụ thể), sau đó bạn đặt tham chiếu đó thành null, lúc này hệ thống kiểu Java sẽ báo cáo rằng đối tượng đó không phải là một thể hiện của kiểu mong đợi.
instanceof = Chỉ báo thiết kế phần mềm xấu?
Bây giờ chúng ta hãy lùi lại một chút, nhìn vào hệ thống phân cấp lớp của chúng ta và xem xét liệu chúng ta có nên viết mã cần sử dụng toán tử instanceof hay không. Mặc dù các ví dụ nhỏ ở trên minh họa cách sử dụng instanceof cơ bản một cách chính xác, nhưng phần mềm nói chung thực sự là một ví dụ cổ điển về thiết kế phần mềm kém. Chỉ cần nhìn vào mã và không có tập hợp các yêu cầu phần mềm trong thế giới thực, sẽ có vẻ an toàn để loại bỏ các kiểm tra instanceof. Mẫu thiết kế được đề xuất trong trường hợp này có xu hướng sử dụng các phương thức ảo (bản thân nó là một chủ đề khác – bạn có thể khám phá nó trong khóa học này về các nguyên tắc cơ bản về Java).
Tiếp tục với dòng suy nghĩ này, thay đổi đầu tiên mà chúng tôi có thể thực hiện là việc bổ sung phương thức PerformTask () vào lớp Nhân viên.
Như bạn có thể thấy, chúng tôi đã cô đọng mã hơn nữa. Nó bắt đầu giống như instanceof có thể được thực hiện hoàn toàn.
Tuy nhiên, nếu bạn còn nhớ, một vài đoạn chúng tôi đã nói phần mềm giả định này thiếu “một tập hợp các yêu cầu phần mềm trong thế giới thực”. Sự thật là, các yêu cầu phần mềm trong thế giới thực khá không khoan nhượng và ít quan tâm đến những hạn chế về thời gian mà một nhóm phát triển phần mềm thường phải chịu. Đôi khi sử dụng instanceof, mặc dù không hoàn hảo về mặt thiết kế – ít nhất là trong môi trường học thuật, là cách chính xác để hoàn thành một dự án đúng hạn. Những lần khác, các yêu cầu phần mềm cực kỳ phức tạp, đến mức không có cách nào rõ ràng để giải quyết vấn đề một cách thanh lịch hơn. Cuối cùng, toán tử instanceof chỉ đơn giản là một công cụ khác trong hộp công cụ của kỹ sư phần mềm mà bạn phải sử dụng một cách thận trọng. Nó có thể khiến những người theo chủ nghĩa thuần túy chế giễu, nhưng ít nhất nó sẽ làm cho mã hoạt động.
Đồng thời, bạn phải làm quen với các phương pháp hay nhất về thiết kế phần mềm. Bên cạnh việc là một việc làm đúng đắn, nó còn có những ứng dụng thực tế. Trừ khi bạn đang làm việc hoàn toàn cô lập (rất khó xảy ra), mã của bạn sẽ được đọc, chia sẻ và có thể được tái cấu trúc bởi các nhà phát triển khác. Biết các phương pháp hay nhất thường có thể khác nhau giữa một dự án thành công và một dự án không thành công.
Tổng kết
Codii mong rằng những thông tin chia sẻ ở trên sẽ giúp các bạn có thể nắm được những kiến thức cần thiết như Java instanceof là gì? Đặc điểm cũng như cách sử dụng sao cho hợp lý nhất. Đặc biệt là phục vụ cho việc cung cấp nền tảng kiến thức cho việc học Java một cách hiệu quả nhất. Chúc các bạn thành công!