cuốn sách gpt4 ai đã làm

java - Kiểm tra xem một lớp có phải là lớp con của một lớp không

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 14:06:48 28 4
mua khóa gpt4 Nike

Tôi đang tải các lớp qua ClassLoader:

Class clazz = urlClassLoader.loadClass(name.substring(0, name.length() - 6).replaceAll("/", "."));
System.out.println(clazz);
System.out.println(clazz.isInstance(SkillCast.class));
System.out.println(SkillCast.class.isInstance(clazz));
System.out.println(SkillCast.class.isAssignableFrom(clazz));
System.out.println(clazz.isAssignableFrom(SkillCast.class));

Đây là cấu trúc của tôi:

lớp công khai SkillFireball mở rộng SkillCast triển khai ISkillThrown
lớp trừu tượng công khai SkillCast mở rộng Skill

Kết quả in ra là:

kỹ năng lớp học.SkillFireball
SAI
SAI
SAI
SAI

Tôi chắc chắn clazz là SkillFireball và tôi có thể in tên trường/phương thức.

Làm cách nào để kiểm tra xem clazz có phải là con của SkillCast không?

biên tập

URLClassLoader tĩnh riêng tư urlClassLoader;

và mã:

ClassLoader cl = Loader.instance().getModClassLoader();
urlClassLoader = URLClassLoader.newInstance(urls.toArray(URL mới[urls.size()]), cl);

Vị trí được trả về bởi #getModClassLoader():

    // Trình nạp lớp mà chúng tôi tải các mod vào.
modClassLoader riêng tư modClassLoader;

bên cạnh đó:

lớp công khai ModClassLoader mở rộng URLClassLoader

Cách hoạt động: API Minecraft Forge đang tải @Mods. Mod của tôi cung cấp SkillCast.class và khi tải nó sẽ cố đọc thư mục trò chơi và tải lớp trong tệp .jar. Bây giờ - tôi không biết mình nên làm gì nữa :C

câu trả lời hay nhất

Tôi đã làm nó.

Vấn đề thực sự là do tôi thiếu hiểu biết về cách thức hoạt động của classLoader-parenting và cách Java tải các lớp.

Điều này được thực hiện bằng cách tạo một URLClassLoader mới và đặt cha mẹ thành ClassLoader được sử dụng bởi chính chương trình chính (được đề cập bởi @Mod).

SkillCast.class được nạp bởi ClassLoader của Mod nên khi thêm lớp mới (SkillFireball) tôi cũng cần sử dụng lớp của Mod thay vì sử dụng lớp mới như trước.

Lớp clazz = Loader.instance().getModClassLoader().loadClass(...)

Đây thực sự không phải là một "câu trả lời", chỉ là một bài viết để kết thúc câu hỏi.

Về java - kiểm tra xem một lớp có phải là lớp con của một lớp hay không, 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/28788387/

28 4 0
không gian vũ trụ
Hồ sơ

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á taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress