gpt4 book ai didi

java - 从类路径中获取通过 X 的父类(super class)继承类 X 的所有类

转载 作者:行者123 更新时间:2023-12-01 18:44:36 24 4
gpt4 key购买 nike

假设我有一个密封类 A,B 和 C 继承它。

sealed class A
open class B(): A()
open class C(): A()

现在,我在类路径中的单独文件中有几个类:com.dummy 继承了类 B 或 C

class D : B(){}

class E : C(){}

class F : B(){}

现在,我想扫描给定 B 或 C 的类路径和父类(super class)类型(即 A)的所有类。

我正在尝试实现它但不起作用的片段

val ref = Reflections("com.dummy", SubTypesScanner(false))
val clazzes = ref.getSubTypesOf(A::class.java)

这将返回 0 个类。如果我更改 getSubTypesOf(B::class.java),那么我可以获得继承 B 的所有类。

最佳答案

我根据您的描述进行了测试,它按预期工作:

单独的类路径:

package com.dummy

import sub.types.test.B
import sub.types.test.C

class D : B(){}

class E : C(){}

class F : B(){}

密封类和测试:

package sub.types.test

import org.reflections.Reflections
import org.reflections.scanners.SubTypesScanner


sealed class A
open class B(): A()
open class C(): A()

fun main() {
val ref = Reflections("com.dummy", SubTypesScanner(false))
var clazzes: Set<Class<*>> = ref.getSubTypesOf(A::class.java)
println("A subclasses")
println(clazzes)
clazzes = ref.getSubTypesOf(B::class.java)
println("B subclasses")
println(clazzes)
}

控制台输出:

12:38:19.102 [main] INFO org.reflections.Reflections - Reflections took 64 ms to scan 1 urls, producing 2 keys and 3 values 
12:38:19.104 [main] DEBUG org.reflections.Reflections - expanded subtype sub.types.test.A -> sub.types.test.C
12:38:19.104 [main] DEBUG org.reflections.Reflections - expanded subtype sub.types.test.A -> sub.types.test.B
A subclasses
[class sub.types.test.C, class com.dummy.D, class com.dummy.E, class sub.types.test.B, class com.dummy.F]
B subclasses
[class com.dummy.D, class com.dummy.F]

不是0个类,而是所有继承类。我希望这能解决一些问题。

关于java - 从类路径中获取通过 X 的父类(super class)继承类 X 的所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59864510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com