为什么下面的代码不能编译?
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)
可以告诉或给我链接这个感谢.
我想你可能误解了仿制药背后的想法.关键是你的班级(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教程.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |