java中关于泛型的两个问题
classPoint<T>{//此处可以随便写标识符号,T是type的简称privateTvar;//var的类型由T指定,即:由外部指定publicTgetVar(){...
class Point<T>{ // 此处可以随便写标识符号,T是type的简称
private T var ; // var的类型由T指定,即:由外部指定
public T getVar(){ // 返回值的类型由外部决定
return var ;
}
public void setVar(T var){ // 设置的类型也由外部决定
this.var = var ;
}
};
public class GenericsDemo05{
public static void main(string[] args)
point<Integer> p=new point<Integer>();
p.setVar(30);
System.out.println(p.getVar()*2);
}
上面这段代码运行结果是60,。可是问题是代码最后一行p.getVar()得到的是Integer类型的对象应该输出地址才对呀。再看下面这段代码
class Info<T>{
private T var ; // 定义泛型变量
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){ // 直接打印
return this.var.toString() ;
}
};
public class GenericsDemo14{
public static void main(String args[]){
Info<String> i = new Info<String>() ; // 使用String为泛型类型
i.setVar("MLDN") ; // 设置内容
fun(i) ;
}
public static void fun(Info<?> temp){ // 可以接收任意的泛型对象
System.out.println("内容:" + temp) ;
}
};
也是最后一行如果想输出"MLDN"应该改为 System.out.println("内容:" + temp.var) ;可实际上不该就能输出"MLDN"
这两个问题希望明白人给解答一下 展开
private T var ; // var的类型由T指定,即:由外部指定
public T getVar(){ // 返回值的类型由外部决定
return var ;
}
public void setVar(T var){ // 设置的类型也由外部决定
this.var = var ;
}
};
public class GenericsDemo05{
public static void main(string[] args)
point<Integer> p=new point<Integer>();
p.setVar(30);
System.out.println(p.getVar()*2);
}
上面这段代码运行结果是60,。可是问题是代码最后一行p.getVar()得到的是Integer类型的对象应该输出地址才对呀。再看下面这段代码
class Info<T>{
private T var ; // 定义泛型变量
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){ // 直接打印
return this.var.toString() ;
}
};
public class GenericsDemo14{
public static void main(String args[]){
Info<String> i = new Info<String>() ; // 使用String为泛型类型
i.setVar("MLDN") ; // 设置内容
fun(i) ;
}
public static void fun(Info<?> temp){ // 可以接收任意的泛型对象
System.out.println("内容:" + temp) ;
}
};
也是最后一行如果想输出"MLDN"应该改为 System.out.println("内容:" + temp.var) ;可实际上不该就能输出"MLDN"
这两个问题希望明白人给解答一下 展开
3个回答
展开全部
问题一:p.getVar()得到的是Integer类型,但是*2表达式会自动unbox成int再执行*2运算
问题二:println()方法会自动调用对象的toString方法,变成打印temp.toString(),即等价于System.out.println("内容:" + temp.toString()) ,所以输出MLDN
问题二:println()方法会自动调用对象的toString方法,变成打印temp.toString(),即等价于System.out.println("内容:" + temp.toString()) ,所以输出MLDN
追问
unbox是什么意思
追答
是拆箱的意思,从jdk1.5以后的版本加入的。
当Integer和int类型进行算术运算的时候,编译器会先自动调用integer.intValue()得到一个int类型再和后面的int类型进行算术运算。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个:p.getVar()当然是拿到Integer对象,自动解包技术,转成int
第二个:System.out.println是调用对象的toString方法,第二个重写了这个方法~
第二个:System.out.println是调用对象的toString方法,第二个重写了这个方法~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1 Integer对象*2会自动拆箱。然后就输出地址了。
另外Integer对象有重写toString方法。
public static void fun(Info<?> temp){ // 可以接收任意的泛型对象
System.out.println("内容:" + temp) ;
}
如果是public static void fun(Info<String> temp){应该就可以了。
因为穿进去的是?,泛型丢了,this.var.toString() 就不会调用String类的toString方法吧。
另外Integer对象有重写toString方法。
public static void fun(Info<?> temp){ // 可以接收任意的泛型对象
System.out.println("内容:" + temp) ;
}
如果是public static void fun(Info<String> temp){应该就可以了。
因为穿进去的是?,泛型丢了,this.var.toString() 就不会调用String类的toString方法吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询