自Java8以来,TypeMirror void不是一个基本类型
我正在将一个Java7项目迁移到Java8。 有一种方法是这样做的:自Java8以来,TypeMirror void不是一个基本类型,java,java-8,primitive-types,Java,Java 8,Primitive Types,我正在将一个Java7项目迁移到Java8。 有一种方法是这样做的: if(type instanceof PrimitiveType){ PrimiriveType type = (Primitivetype) type; ... } 在Java7中,void类型是PrimitiveType的一个实例,但自从Java8以来,它已经改变了 为什么会发生变化?在Java8中定义void类型的接口是什么 提前感谢,Juan类型用表示。但即使在Java 7中,也只包括布尔,字节,短,in
if(type instanceof PrimitiveType){
PrimiriveType type = (Primitivetype) type;
...
}
在Java7中,void类型是PrimitiveType的一个实例,但自从Java8以来,它已经改变了
为什么会发生变化?在Java8中定义void类型的接口是什么
提前感谢,Juan类型用表示。但即使在Java 7中,也只包括
布尔
,字节
,短
,int
,长
,字符
,浮点
,和double
您应该根据和的文档使用javax.lang.model.type.NoType
。如果您使用instanceof
,我看不出它会被更改,您将了解实现类是否碰巧实现了一个特定的接口
,它只是一个实现细节。如果您不想评估实现细节,请使用API,即type.getKind().isPrimitive()
…您完全正确,我现在正在这样做,但没有isNoType()方法,因此我以一堆instace of:/where's note()方法结束。如果你看一下,你会发现只有三种可能的类型,VOID
,PACKAGE
,和NONE
,它们在大多数上下文中都是可变的。例如,唯一可以显示为方法返回类型的NoType
是VOID
,因此简单的type.getKind()==TypeKind.VOID
就足够了。类似地,唯一可以显示为超类的NoType
是NONE
,等等。由于TypeKind
是一个enum
,您可以使用switch
而不是一堆sthanks manouti的实例,我知道这些是原语类型所覆盖的唯一类型,但是在Java7中,当type为void时,PrimitiveType的语句type instanceof
仍然返回true。我觉得很奇怪。