在泛型类中编译错误

Ash*_*rma 1 java generics

为什么下面的代码不能编译?

class aa1 <String> {
public void fun(){
String s = ""; // not compiling
}
}
class aa2 <String> {
String s = "";  // not compiling
}
class aa3 <String> {
String s = (String)""; // compiling
}
Run Code Online (Sandbox Code Playgroud)

可以告诉或给我链接这个感谢.

Jon*_*uis 6

我想你可能误解了仿制药背后的想法.关键是你的班级(aa在这种情况下)可以......好吧,通用.它不是一种固定类型,而是通过多态可以是任意数量的类型.泛型类型与变量名类似,但它表示一个类,而不是类的实例.你可以这样做:

class aa <T> {
    public void fun(T myObject){
        T s = myObject;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是对泛型的适当使用. T只是代表"一些阶级". 您发布的示例之所以没有编译,是因为您覆盖了String的可见性(使其成为泛型类型,而不是java.lang.String).如果您不希望它是任何类,但是某些类的子集,您可以执行以下操作:

class aa <T extends MyInterface> {
    public void fun(T myObject){
        T s = myObject;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以保证类的实例T也扩展了接口MyInterface.但是,你不能扩展String,因为它是最终的.如果您只想要String设置对象,则根本不需要泛型:

class aa {
    public void fun(){
        String s = "";
    }
}
Run Code Online (Sandbox Code Playgroud)

有关泛型的更多信息,请阅读有关泛型的Java教程.