16. tháng 4 2025
Trong quá trình làm việc với một SDK Android của module Bluetooth từ bên thứ ba, tôi đã sao chép một đoạn mã demo để thử nghiệm. Tuy nhiên, khi chạy ứng dụng, chương trình đột trò bắn cá ngột bị sập và báo lỗi:
java.lang.RuntimeException: Unable to instantiate activity
Ngoài thông báo lỗi này, không có thêm bất kỳ thông tin nào hữu ích j88 online khác. Điều đó khiến tôi cảm thấy rất khó khăn trong việc xác định nguyên nhân cụ thể.
Sau khi tìm kiếm trên mạng, tôi phát hiện ra rằng một tình huống tương tự từng xảy ra với một số lập trình viên khác. Họ cho rằng vấn đề có thể xuất phát từ việc lớp Activity
được khai báo là trừu tượng (abstract
). Tôi nhanh chóng kiểm tra lại đoạn mã của mình và nhận ra rằng đúng là như vậy:
1public abstract class NodeListActivity extends NodeScanActivity implements NodeRecyclerViewAdapter
Khi tôi loại bỏ từ khóa abstract
, các lỗi mới bắt đầu xuất hiện:
1Class 'NodeListActivity' phải được khai báo là trừu tượng hoặc triển khai phương thức trừu tượng 'onNodeSelected(Node)' trong 'OnNodeSelectedListener'.
2Class 'NodeListActivity' phải được khai báo là trừu tượng hoặc triển khai phương thức trừu tượng 'displayNode(Node)' trong 'FilterNode'.
Theo hướng dẫn từ các lỗi này, tôi lần lượt triển khai tất cả các phương thức trừu tượng còn thiếu.
Một lớp trừu tượng là một lớp chưa hoàn chỉnh vì nó thiếu một số phần quan trọng. Việc gắn từ khóa abstract
trước tên lớp có nghĩa là lớp đó không thể được khởi tạo trực tiếp mà chỉ có thể thông qua thừa kế. Các lớp con kế thừa từ lớp trừu tượng cần phải triển khai tất cả các phương thức trừu tượng mà lớp cha yêu cầu.
Ví dụ: Nếu bạn có một lớp trừu tượng với các phương thức trừu tượng, bất kỳ lớp con nào kế thừa từ lớp đó đều phải cung cấp phiên bản cụ thể cho những phương thức đó. Điều này đảm bảo rằng mọi đối tượng được bóng đá ngoại hạng anh trực tiếp hôm nay tạo ra đều hoạt động đúng theo mong muốn.
Trong trường hợp của tôi, sau khi loại bỏ từ khóa abstract
khỏi lớp NodeListActivity
, tôi buộc phải triển khai hai phương thức trừu tượng là onNodeSelected(Node)
và displayNode(Node)
. Đây là điều bắt buộc để chương trình có thể biên dịch và chạy thành công.