Làm cách nào để giải quyết ClassCastException trong Java?

Lam Cach Nao De Giai Quyet Classcastexception Trong Java



Trong Java, “ ClassCastException ” giúp xác định các vấn đề về tính tương thích của loại trong thời gian chạy, bằng cách cho phép các nhà phát triển nắm bắt chúng sớm trong giai đoạn phát triển. Nó cũng đảm bảo an toàn kiểu, ngăn ngừa sự không nhất quán trong chương trình. ClassCastException giúp ích rất nhiều trong quá trình gỡ lỗi, kiểm tra, truyền đúng kiểu, v.v.

Hướng dẫn này trình bày quy trình giải quyết ClassCastException trong Java.







ClassCastException phát sinh như thế nào trong Java?

Các ' ClassCastException ” đảm bảo truyền kiểu phù hợp và ngăn lỗi thời gian chạy do chuyển đổi kiểu không tương thích gây ra. Nói một cách đơn giản, ngoại lệ này được ném ra khi một đối tượng được cố gắng chuyển sang một loại không tương thích.



Chẳng hạn, hãy truy cập đoạn mã dưới đây về “ ClassCastException ” trong Java:



nhập khẩu java.io.* ;
nhập khẩu java.lang.* ;
nhập khẩu java.util.* ;

lớp học LinuxGợi ý {
//Tạo lớp trình điều khiển
công cộng tĩnh khoảng trống chủ yếu ( Sợi dây [ ] tranh luận )
{
thử {
Sự vật cha mẹ = mới Sự vật ( ) ;

Sợi dây đứa trẻ = ( Sợi dây ) cha mẹ ;
Hệ thống . ngoài . bản in ( đứa trẻ ) ;
}
nắm lấy ( Ngoại lệ f ) {
Hệ thống . ngoài . bản in ( f ) ;
}
}
}

Giải thích đoạn mã trên:





  • Bên trong ' thử ” khối, thể hiện của một đối tượng “ cha mẹ ” được khai báo bằng cách sử dụng “ mới ” từ khóa.
  • Sau đó, typecasting được sử dụng trong đó “ sự vật ” loại đang được đánh máy và có tên là “ đứa trẻ ”.
  • Việc đánh máy này vi phạm quy tắc rằng lớp cha không được đánh máy cho lớp con của nó. Đó là lý do tại sao ngoại lệ phát sinh vì “ sự vật ” loại là một lớp cha.
  • Cuối cùng, “ nắm lấy ” khối được sử dụng có “ Ngoại lệ ” làm tham số và in thông báo trên bảng điều khiển.

Sau khi kết thúc giai đoạn thực hiện:



Ảnh chụp nhanh ở trên cho thấy sự xuất hiện của ClassCastException trong Java.

Làm cách nào để giải quyết ClassCastException trong Java?

Ba giải pháp khả thi được sử dụng mà nhà phát triển có thể dễ dàng giải quyết hoặc tránh cơ hội nâng cao “ ClassCastException ” trong Java.

Các giải pháp này được mô tả riêng dưới đây:

Giải pháp 1: Sử dụng Toán tử “instanceof”

Các ' dụ của ” nhà điều hành xác minh nếu “ sự vật ” có phải là một thể hiện của loại mong muốn hay không. Việc xác minh này giúp ngăn chặn sự xuất hiện của “ ClassCastException ”. Chẳng hạn, hãy truy cập khối mã bên dưới:

công cộng lớp học TypeCheckingLinuxHint {
công cộng tĩnh khoảng trống chủ yếu ( Sợi dây [ ] tranh luận ) {

Sự vật cha mẹ = 'Gia đình LinuxHint' ;
nếu như ( cha mẹ dụ của Sợi dây ) {
Sợi dây đứa trẻ = ( Sợi dây ) cha mẹ ;
Hệ thống . ngoài . bản in ( 'Sau khi đánh máy Chuỗi:' + đứa trẻ ) ;
} khác {
Hệ thống . ngoài . bản in ( 'Đối tượng là một thể hiện của kiểu String mong muốn.' ) ;
}
}
}

Giải thích đoạn mã trên:

  • Đầu tiên ' cha mẹ ” đối tượng được tạo và được khởi tạo với giá trị giả bên trong “ thử ' khối.
  • Sau đó, sử dụng 'nếu như' tuyên bố trong đó “ dụ của Toán tử ” được sử dụng để kiểm tra phiên bản của “ cha mẹ ” đối tượng với mong muốn “ Sợi dây ' kiểu.
  • Tiếp theo, nếu điều kiện trả về “ ĐÚNG VẬY ” việc đánh máy được thực hiện và hiển thị trên bảng điều khiển.
  • Nếu không, thông báo lỗi tùy chỉnh được hiển thị trên bảng điều khiển.

Sau khi kết thúc giai đoạn thực hiện:

Ảnh chụp nhanh cho thấy quá trình đánh máy đã được thực hiện thành công và ClassCastException được giải quyết bằng cách sử dụng “ dụ của ' nhà điều hành.

Giải pháp 2: Xem xét và điều chỉnh hoạt động đánh máy chính xác

Một giải pháp khác là kiểm tra mã nhiều lần và xem xét các loại tương thích để đánh máy. Chẳng hạn, hãy truy cập mã bên dưới trong đó “ ClassCastException ” bị bắt do loại mong muốn không tương thích để đánh máy:

công cộng lớp học TypeCheckLinuxGợi ý {
công cộng tĩnh khoảng trống chủ yếu ( Sợi dây [ ] tranh luận ) {
Sự vật cha mẹ = 'Gia đình LinuxHint' ;
số nguyên số đã chuyển đổi = ( số nguyên ) cha mẹ ;
Hệ thống . ngoài . bản in ( 'Số sau khi đánh máy:' + số đã chuyển đổi ) ;
}
}

Trong đoạn mã trên, lập trình viên đã bỏ sai “ Sợi dây ' ĐẾN ' số nguyên ”.

Sau khi kết thúc giai đoạn biên dịch:

Ảnh chụp nhanh ở trên cho thấy sự xuất hiện của ClassCastException.

Giải pháp 3: Sử dụng thuốc gốc

Các lập trình viên có thể sử dụng “ thuốc gốc ” để chỉ định các loại dự kiến ​​và thực thi an toàn loại tại thời điểm biên dịch.

Chẳng hạn, hãy truy cập mã dưới đây:

nhập khẩu java.util.ArrayList ;
nhập khẩu java.util.List ;

công cộng lớp học sử dụngGenerics {
công cộng tĩnh khoảng trống chủ yếu ( Sợi dây [ ] tranh luận ) {
Danh sách < Sợi dây > empName = mới Lập danh sách <> ( ) ;
empName. thêm vào ( 'Harry' ) ;
empName. thêm vào ( 'Thợ gốm' ) ;

Sợi dây Ban đầu = empName. lấy ( 0 ) ;
Sợi dây Cuối cùng = empName. lấy ( 1 ) ;

Hệ thống . ngoài . bản in ( 'Tên đầu tiên: ' + Ban đầu ) ;
Hệ thống . ngoài . bản in ( 'Tên thứ hai: ' + Cuối cùng ) ;
}
}

Giải thích đoạn mã trên:

  • Đầu tiên, các tiện ích cần thiết được nhập vào tệp Java và một lớp “ sử dụngGenerics ” được tuyên bố.
  • Tiếp theo, phần “ Lập danh sách ” thuộc loại “ Sợi dây ” được khai báo với tên “ empName ” và được khởi tạo bằng cách cung cấp hai phần tử dữ liệu giả.
  • Sau đó, tạo hai biến kiểu String có tên “ Ban đầu ' Và ' Cuối cùng ”. Sau đó, gán giá trị bằng cách truy cập các số chỉ mục.
  • Cuối cùng, hiển thị cả hai biến để xem kết quả.

Sau khi kết thúc thực hiện, đầu ra trông như thế này:

Ảnh chụp nhanh ở trên minh họa rằng việc đánh máy đã được thực hiện bằng cách sử dụng thuốc generic.

Phần kết luận

Để giải quyết “ ClassCastException ” trong Java, lập trình viên phải đảm bảo tương thích đúng kiểu, sử dụng “ thuốc gốc ' và ' dụ của ' nhà điều hành. Để giải quyết ngoại lệ, lập trình viên phải xem xét và sửa thao tác truyền bằng cách đảm bảo khả năng tương thích kiểu phù hợp. Hơn nữa, điều này “ ClassCastException ” có thể tránh được bằng cách sử dụng “ thuốc gốc ” và với việc sử dụng một “ dụ của ' nhà điều hành. Hướng dẫn này đã trình bày phương pháp giải quyết ClassCastException trong Java.