Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接口前无接口字_Java_Comparable - Fatal编程技术网

Java 接口前无接口字

Java 接口前无接口字,java,comparable,Java,Comparable,这是细节,但我想知道为什么会发生这种情况 示例代码: Class klasa = Enum.class; for(Type t : klasa.getGenericInterfaces()) System.out.println(t); 程序的输出: java.lang.Comparable<E> interface java.io.Serializable java.lang.com 接口java.io.Serializable 为什么在输出中,java.lang.Co

这是细节,但我想知道为什么会发生这种情况

示例代码:

Class klasa = Enum.class;
for(Type t : klasa.getGenericInterfaces())
   System.out.println(t);
程序的输出:

java.lang.Comparable<E>
interface java.io.Serializable
java.lang.com
接口java.io.Serializable
为什么在输出中,
java.lang.Comparable
之前没有接口字。这是接口,是吗

我认为产出应该是:

**interface** java.lang.Comparable<E>
interface java.io.Serializable
**接口**java.lang.com
接口java.io.Serializable

Comparable是经过特殊处理的吗?

发生的事情是,您得到了两个不同的子类
java.lang.reflect.Type
;一种是泛型类型(可能是
j.l.r.parameteredType
),另一种是特定(非泛型)接口类型(a
j.l.Class

您想对该信息做什么,以及为什么?

表示“接口”在任何情况下都不会输出(内部
类型
,即
可比
):

public String toString() {
    StringBuilder sb = new StringBuilder();

    if (ownerType != null) {
        if (ownerType instanceof Class)
            sb.append(((Class)ownerType).getName());
        else
            sb.append(ownerType.toString());

        sb.append(".");

        if (ownerType instanceof ParameterizedTypeImpl) {
            // Find simple name of nested type by removing the
            // shared prefix with owner.
            sb.append(rawType.getName().replace( ((ParameterizedTypeImpl)ownerType).rawType.getName() + "$",
                                     ""));
        } else
            sb.append(rawType.getName());
    } else
        sb.append(rawType.getName());

    if (actualTypeArguments != null &&
        actualTypeArguments.length > 0) {
        sb.append("<");
        boolean first = true;
        for(Type t: actualTypeArguments) {
            if (!first)
                sb.append(", ");
            if (t instanceof Class)
                sb.append(((Class)t).getName());
            else
                sb.append(t.toString());
            first = false;
        }
        sb.append(">");
    }

    return sb.toString();
}

将对象转换为字符串。字符串表示法是字符串“类”或“接口”,后跟空格,然后是类的完全限定名,格式为getName。如果此类对象表示基元类型,则此方法返回基元类型的名称。如果该类对象表示void,则该方法返回“void”

公共字符串更多…toString(){
StringBuilder sb=新的StringBuilder();
if(ownerType!=null){
if(ownerType实例类)
sb.append(((类)ownerType.getName());
其他的
sb.append(ownerType.toString());
某人加上(“.”);
if(ownerType instanceof ParameterizedTypeImpl){
//通过删除
//与所有者共享前缀。
sb.append(rawType.getName().replace((ParameterizedTypeImpl)ownerType).rawType.getName()+“$”,
""));
}否则
sb.append(rawType.getName());
}否则
sb.append(rawType.getName());
if(actualTypeArguments!=null&&
actualTypeArguments.length>0){
某人加上(“”);
}
使某人返回字符串();
}  
调用
ParameterizedTypeImpl
toString()方法后,不会附加接口关键字。它只调用
getName()
方法

名称
接口java.lang.Compariable
在t中。语句
System.out.println(t)之后调用
toString()

当我调试时,您可以看到下图


我只想知道为什么缺少word
界面
。这是
接口
,但缺少
接口
word。因为调用了两个不同版本的
toString()
;添加接口的类版本,以及不添加接口的
ParameterizedType
子类版本。不过,这是一个学术问题,还是您需要根据这些数据执行决策?这是我未来知识的学术问题。如果您可以访问OpenJDK源代码,请查看
java.lang.Class#toString()
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl#toString()
。幸运猜测:java.lang包中有Compariable。
public String toString() {
    return (isInterface() ? "interface " : (isPrimitive() ? "" : "class "))
        + getName();
}
public String toString()
public String More ...toString() {
    StringBuilder sb = new StringBuilder();

    if (ownerType != null) {
        if (ownerType instanceof Class)
            sb.append(((Class)ownerType).getName());
        else
            sb.append(ownerType.toString());

        sb.append(".");

        if (ownerType instanceof ParameterizedTypeImpl) {
            // Find simple name of nested type by removing the
           // shared prefix with owner.
            sb.append(rawType.getName().replace( ((ParameterizedTypeImpl)ownerType).rawType.getName() + "$",
                                     ""));
        } else
            sb.append(rawType.getName());
    } else
        sb.append(rawType.getName());

    if (actualTypeArguments != null &&
        actualTypeArguments.length > 0) {
        sb.append("<");
        boolean first = true;
        for(Type t: actualTypeArguments) {
            if (!first)
                sb.append(", ");
            if (t instanceof Class)
                sb.append(((Class)t).getName());
            else
               sb.append(t.toString());
           first = false;
        }
        sb.append(">");
    }

    return sb.toString();
}