Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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_Generics_Warnings_Raw Types - Fatal编程技术网

Java 以班级代替班级是一种良好的做法吗<;?扩展对象>;为了避免警告?

Java 以班级代替班级是一种良好的做法吗<;?扩展对象>;为了避免警告?,java,generics,warnings,raw-types,Java,Generics,Warnings,Raw Types,在我的代码中的许多地方,我有如下内容: public Class mySpecialMethod() { return MySpecialClass.class; } 这导致了警告 类是原始类型。提及 泛型类型类应为 参数化 但是,如果我替换 Class 与 Class是的,完全正确 您需要指定类型。如果不能,则必须指定通配符 进一步阅读:根据您想要实现的目标,您可以更加精确: public Class<MySpecialClass> mySpecialMethod() {

在我的代码中的许多地方,我有如下内容:

public Class mySpecialMethod() {
  return MySpecialClass.class;
}
这导致了警告

类是原始类型。提及 泛型类型类应为 参数化

但是,如果我替换

Class


Class是的,完全正确

您需要指定类型。如果不能,则必须指定通配符


进一步阅读:

根据您想要实现的目标,您可以更加精确:

public Class<MySpecialClass> mySpecialMethod() {
  return MySpecialClass.class;
}
公共类mySpecialMethod(){
返回MySpecialClass.class;
}

这里不是真正的Java程序员,但读了一些关于泛型的好文章

是的,您应该添加一些通配符或确切的类型(
Class
)以增加安全性。原因是类是泛型的。因此,删除泛型类型参数后,
Class
Class
是相同的。它们都变成了
,即所谓的原始类型。这种擦除是在编译时发生的。编译器帮助您进行自动转换的示例(为简洁起见,省略了异常处理):

class-Mine{}
瓦拉级{
公共静态void main(字符串…参数){
{//works.translated to Mine m=(Mine)c.newInstance();
c类=矿山级;
Mine m=c.newInstance();
}
{//不起作用。需要强制转换:Mine m=(Mine)c.newInstance();

Class c=Mine.Class;//也可以是Class或Class
(以及等价的
Class,只有在类对象确实不需要表示公共基类或接口时才是正确的做法

而且
Class
实际上与
Class相同
class Mine { }

class Vara {
    public static void main(String... args) {
        { // works. translated to Mine m = (Mine) c.newInstance();
            Class<Mine> c = Mine.class;
            Mine m = c.newInstance();
        }
        { // doesn't work. need a cast: Mine m = (Mine) c.newInstance();
            Class c = Mine.class; // also Class<?> or Class<? extends Object>
            Object o = c.newInstance(); // but this works. pointing to a Mine
            Mine m = (Mine) c.newInstance(); // needs a manual cast
        }
    }
}