在type.TypeKind这个类中,描述了java中所有的数据类型以及那八种基本数据类型,可以很清晰的看出java总共有多少种数据类型
public enum TypeKind {
BOOLEAN, BYTE, SHORT, INT, LONG, CHAR, FLOAT, DOUBLE, VOID, NONE, NULL, ARRAY, DECLARED,
ERROR, TYPEVAR, WILDCARD, PACKAGE, EXECUTABLE, OTHER;
public boolean isPrimitive() {
switch(this) {
case BOOLEAN:
case BYTE:
case SHORT:
case INT:
case LONG:
case CHAR:
case FLOAT:
case DOUBLE:
return true;
default:
return false;
}
}
}
在element.ElementKind这个类中描述了java语言中有多少元素,如静态代码块,构造代码块,构造器,参数,注解,异常等等都有描述。
并且我们可以很清晰的看到,枚举也是一个类,注解也是一种借口等。
public enum ElementKind {
PACKAGE, ENUM, CLASS, ANNOTATION_TYPE, INTERFACE, ENUM_CONSTANT, FIELD, PARAMETER, LOCAL_VARIABLE,
EXCEPTION_PARAMETER, METHOD, CONSTRUCTOR, STATIC_INIT, INSTANCE_INIT, TYPE_PARAMETER, OTHER;
public boolean isClass() {
return this == CLASS || this == ENUM;
}
public boolean isInterface() {
return this == INTERFACE || this == ANNOTATION_TYPE;
}
public boolean isField() {
return this == FIELD || this == ENUM_CONSTANT;
}
}
并且在tpye目录下还有一个祖先接口叫做TypeMirror的,它有一些子接口比如ReferenceType或者PrimitiveType,至此我感觉这个目录的的确确是用来描述java语言模型的。在element目录下有个祖先接口叫做Element的东西,它也有一些子接口比如TypeElement之类。
按照我的逻辑推断,java语言所使用的数据类型都应该是这些接口的一个实现。于是我满怀欣喜的去看,看看java.lang.Byte的声明
public final class Byte extends Number implements Comparable<Byte> {
先说明Comparable接口没有继承任何接口,我又查看了一些其它的数据类型的声明,结果是大同小异的
public final class Short extends Number implements Comparable<Short> {
这个结果和我预想的大不一样,我本以为代码应该类似于*** implements ByteType之类。
我在网上通过关键字javax.lang.model,发现有一些人写的文章也是说这个目录描述了java语言的模型。
那么,我的理解到底是哪里出问题了么?
还是说那套model根本就没啥用?