Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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.lang.Object#getClass()的Eclipse外部空注释_Java_Eclipse_Null_Annotations_External Annotations - Fatal编程技术网

java.lang.Object#getClass()的Eclipse外部空注释

java.lang.Object#getClass()的Eclipse外部空注释,java,eclipse,null,annotations,external-annotations,Java,Eclipse,Null,Annotations,External Annotations,我正在使用EclipseMars中提供的外部空注释工具。我试图为java.lang.Object#getClass()添加外部注释,但似乎无法正确获取签名。我尝试了以下几种变体: @NonNull Class<?> getClass() [()L1java/lang/Class<*>;] @NonNull Class<@NonNull ?> getClass() [()L1java/lang/Class<*1>;] src/bar/package

我正在使用EclipseMars中提供的外部空注释工具。我试图为
java.lang.Object#getClass()
添加外部注释,但似乎无法正确获取签名。我尝试了以下几种变体:

@NonNull Class<?> getClass() [()L1java/lang/Class<*>;]
@NonNull Class<@NonNull ?> getClass() [()L1java/lang/Class<*1>;]
src/bar/package info.java

package bar;

public class Foo {
    private static void printType(Class<?> type) {
        System.out.println(type.getName());
    }

    public static void main(String[] args) {
        Foo foo = new Foo();
        printType(foo.getClass());
    }
}
@org.eclipse.jdt.annotation.NonNullByDefault
package bar;
class java/lang/Object
getClass
 ()Ljava/lang/Class<*>;
 ()L1java/lang/Class<*>;
annotations/java/lang/Object.eea

package bar;

public class Foo {
    private static void printType(Class<?> type) {
        System.out.println(type.getName());
    }

    public static void main(String[] args) {
        Foo foo = new Foo();
        printType(foo.getClass());
    }
}
@org.eclipse.jdt.annotation.NonNullByDefault
package bar;
class java/lang/Object
getClass
 ()Ljava/lang/Class<*>;
 ()L1java/lang/Class<*>;
.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="annotationpath" value="/null-annotation-test/annotations"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="org.eclipse.jdt.annotation_2.0.100.v20150311-1658.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>
这与我在没有外部空注释的情况下得到的警告相同


如何正确地为
java.lang.Object#getClass()
创建外部空注释以删除此警告?还是我在声明
printType
时遇到的问题?

Louis Wasserman是正确的,就类型检查而言,没有一个
getClass()
方法,但每个类都有自己的带有专门签名的方法。因此,.eea文件中的任何签名都不会与实际的getClass()方法匹配

我提交了一份文件,希望在编译器中加入更多关于
getClass()
的特殊知识,这样这个beast就不需要外部注释了


编辑:此功能已经实现,并将随Eclipse4.6(Neon)发布。

我不确定这是否可行
getClass
是一个非常神奇的函数;它在编译器的类型检查器中被特别处理。