gpt4 book ai didi

Java 反射实例检查不同类

转载 作者:行者123 更新时间:2023-12-02 02:19:06 24 4
gpt4 key购买 nike

我有一个方法,它将类引用作为参数,如下所示:

getConfigModule(Class klass) {
//logic to check the class types
}

我们从其他类调用此方法,如下所示:

    getConfigModule(ClassA.class);
getConfigModule(ClassB.class);
getConfigModule(ClassC.class);

我需要在方法中编写一些逻辑来检查“klass”是否属于特定的类类型。例如检查“klass”是否属于 ClassA 和 ClassB 类型。

最佳答案

就像 @@RannLifshitz 提到的,最直接的方法是使用 if-then-else ifswitch 方法。如果您知道只有 3 个选项并且可以打赌不会添加任何内容,那么没关系。

对于长期项目,可以使用枚举方式。

public enum PossibleClasses {
CLASS_A(ClassA.class), CLASS_B(ClassB.class);
Class klass;

PossibleClasses(Class klass) {
this.klass = klass;
}

static PossibleClasses fromClass(Class desiredClass) {
for (PossibleClasses current:PossibleClasses.values()) {
if (current.klass == desiredClass) {
return current;
}
}
// here you could implement logic regarding class inheritance or something else.
throw new IllegalArgumentException("Uknown class:"+desiredClass);
}
}

然后与枚举值而不是Class进行比较。

if (PossibleClasses.fromClass(klass) == CLASS_A) {
//do something
}

这在您修改代码时会有帮助。例如,如果有人调用全新类的方法,他会得到信息异常。您还可以使用枚举的一些标准功能,例如 EnumSet 来编写清晰的代码,例如

// would be a field
private EnumSet<PossibleClasses> commonOption = EnumSet.of(CLASS_A, CLASS_B);

// somewhere inside code
if (commonOption.contains(PossibleClasses.fromClass(klass))) {
// instructions which are common for both classes
}
<小时/>

同样,对于长期项目来说,使用枚举是个好主意。对于启动或教育/调查项目,您很可能无法从这些额外的代码行中获得好处。

关于Java 反射实例检查不同类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48802006/

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