public class xt {
public static void main(String in[]){
Animal an=new Animal();
Cat ca=new Cat();
String s=new String("listene to me");
Cage cg=new Cage();
cg.set(s);
show(cg);
}
static void show(Cage<Animal> cg){
System.out.println(cg.get());
}
}
class Animal{
public String toString(){
return "I am Animal";
}
}
class Cat extends Animal{
public String toString(){
return "I am Cat";
}
}
class Cage<T>{
private T to;
void set(T to){
this.to=to;
}
T get(){
return to;
}
}
问题就是:
这段代码为何能正常执行?
show()方法的定义中已经指定了参数必须是Cage<Animal>类型,
为什么使用一个未指定泛型的Cage对象cg作为参数,
居然不报错,还可以正常执行,奇怪!
public static void main(String in[]){
Animal an=new Animal();
Cat ca=new Cat();
String s=new String("listene to me");
Cage cg=new Cage();
cg.set(s);
show(cg);
}
static void show(Cage<Animal> cg){
System.out.println(cg.get());
}
}
class Animal{
public String toString(){
return "I am Animal";
}
}
class Cat extends Animal{
public String toString(){
return "I am Cat";
}
}
class Cage<T>{
private T to;
void set(T to){
this.to=to;
}
T get(){
return to;
}
}
问题就是:
这段代码为何能正常执行?
show()方法的定义中已经指定了参数必须是Cage<Animal>类型,
为什么使用一个未指定泛型的Cage对象cg作为参数,
居然不报错,还可以正常执行,奇怪!
其实也还好了,比没有看着好些.
不过运行起来都一样.
有的时候还真想全都搞成Object算了.
好像你对泛型理解错了,给show()参数传Cage的对象当然是可以的,因为show()方法的参数就是Cage的对象。这和它泛型没有多大关系,只会像现在这种情况给个没有定义泛型的警告。当然你这程序没有完全达到你自定义泛型的目的。可能你要接下来这样做来实现定义泛型的目的。
如:
class xt {
public static void main(String in[]){
Animal an=new Animal();
Cat ca=new Cat();
String s=new String("listene to me");
Cage<Animal> cg=new Cage<Animal>();
cg.set(ca);
show(cg);
}
static void show(Cage<Animal> cg){
System.out.println(cg.get());
}
}
class Animal{
public String toString(){
return "I am Animal";
}
}
class Cat extends Animal{
public String toString(){
return "I am Cat";
}
}
class Cage<T>{
private T to;
void set(T to){
this.to=to;
}
T get(){
return to;
}
}