如何在ArchUnit中从JavaType导航到对应的JavaClass?
在ArchUnit中从JavaType获取JavaClass并检查返回类型是否为基本类型
核心思路
JavaType是ArchUnit中表示类型的顶层接口,JavaClass是它的实现类之一(对应普通类、基本类型等)。你可以通过类型转换获取JavaClass实例,再调用其isPrimitive()方法判断是否为基本类型。
方法1:直接类型判断与强转
如果确定返回类型是普通类或基本类型(非参数化类型),直接强转即可:
JavaMethod targetMethod = ...; // 先获取目标方法实例 JavaType returnType = targetMethod.getJavaType(); if (returnType instanceof JavaClass) { JavaClass returnClass = (JavaClass) returnType; boolean isPrimitiveReturnType = returnClass.isPrimitive(); // 编写你的业务逻辑 }
方法2:使用as()方法安全转换
ArchUnit提供了JavaType.as(Class<T>)方法,返回Optional<T>,避免强制类型转换的风险:
JavaMethod targetMethod = ...; JavaType returnType = targetMethod.getJavaType(); Optional<JavaClass> returnClassOpt = returnType.as(JavaClass.class); returnClassOpt.ifPresent(returnClass -> { boolean isPrimitive = returnClass.isPrimitive(); // 编写处理逻辑 });
处理参数化类型场景
如果方法返回的是参数化类型(比如List<Integer>),JavaType会是JavaParameterizedType,你可以先获取其原始类型再检查:
JavaMethod targetMethod = ...; JavaType returnType = targetMethod.getJavaType(); if (returnType instanceof JavaParameterizedType) { JavaParameterizedType paramType = (JavaParameterizedType) returnType; JavaClass rawType = paramType.getRawType(); // 检查原始类型是否为基本类型(参数化类型的原始类型通常不是基本类型,仅作示例) boolean isRawPrimitive = rawType.isPrimitive(); }
编写ArchUnit规则时的简化写法
如果是在编写架构规则,可以直接用内置断言快速实现:
ArchRule primitiveReturnTypeRule = methods() .that().arePublic() .should().haveRawReturnType(rawType -> rawType.isPrimitive());
内容的提问来源于stack exchange,提问作者r-uu
相关产品推荐
相关产品推荐

