public class Gen{
public static void main(String arg[]){
Info <String> i1 = new Info<String>();
Info <String> i2 = new Info<String>();
i1.setNum("zsqss");
i2.setNum("hello");
add(i1,i2);
Integer i[] = fun1(1,2,3,4);
fun2(i);
}
public static <T> T[]fun1(T...arg){return arg;}
public static <T>void fun2(T p[]){
System.out.println("accept the msg");
for(T t:p){System.out.println(t+"',");}
System.out.println();
};
public static <T>void add(Info<T>i1,Info<T>i2){
System.out.println(i1.getNum()+" "+i2.getNum());//如果去掉中间“ ”会报错,int没问题字符串会报错。
//以上程序是我在nopad++中写的java程序,不会和这个有关吧
};
}
class Info<T>{
private T num;
public void setNum(T num){this.num = num;};
public T getNum(){return this.num;};
public String toString(){return this.num.toString();};
}
请java大哥们帮我看看这个问题,小弟从c++转型java学习中那,不太明白这是什么问题
public static void main(String arg[]){
Info <String> i1 = new Info<String>();
Info <String> i2 = new Info<String>();
i1.setNum("zsqss");
i2.setNum("hello");
add(i1,i2);
Integer i[] = fun1(1,2,3,4);
fun2(i);
}
public static <T> T[]fun1(T...arg){return arg;}
public static <T>void fun2(T p[]){
System.out.println("accept the msg");
for(T t:p){System.out.println(t+"',");}
System.out.println();
};
public static <T>void add(Info<T>i1,Info<T>i2){
System.out.println(i1.getNum()+" "+i2.getNum());//如果去掉中间“ ”会报错,int没问题字符串会报错。
//以上程序是我在nopad++中写的java程序,不会和这个有关吧
};
}
class Info<T>{
private T num;
public void setNum(T num){this.num = num;};
public T getNum(){return this.num;};
public String toString(){return this.num.toString();};
}
请java大哥们帮我看看这个问题,小弟从c++转型java学习中那,不太明白这是什么问题
解决方案 »
- SHH整合添加Hibernate时不能用
- sql 连表查询问题
- 急急急,请教解决个问题,请各位大哥大姐帮帮忙
- 帮忙完成一个程序谢谢
- lomboz eclipse报错
- 大家好,办个小忙 百里马 寻 伯乐
- 一个不一样的二级联动问题!
- 新手问题 JDBC连接数据库出错.
- (急问)用resin+jsp+mysql的一个在线考试系统,在连接达到一定数量时随机出现查询不到字段的错误!!
- 为什么我的class文件打包成jar后放到war的lib下面jsp页面会访问不到,而不打包直接放到classes下或war根目录下就可以了?
- ajax 获得的result字符串中总是有18个空格,不知道为什么
- logback比log4j性能还低?
或者你传Info<String> i1, Info<String> i2,告诉编译器我装的就是String
你写i1.getNum()+i2.getNum()的时候,加号连接的是两个T类型的对象,编译器无法知道T类型是否可以相加,所以只好报错。
而写i1.getNum()+" "+i2.getNum()按照运算法则,先运算左边加号,加号左边是T类型,右边是String,于是,就自动调用toString()转化为字符串相加,成为字符串,然后计算右边加号,同理。我打个比方吧,如果你的T类型为String,则"1"+"2"则为"12",而"1"+""+"2"则为"12"
但是如果你的T类型为int,则1+2为3,而1+""+2则为"12",前者是int型,后者是String型
所以,编译器不知道T类型的情况下怎么编译你的程序呢?
反过来,你写成a+""+b,编译器就能顺利地编译了,即a.toString()+""+b.toString()
class Cas<T extends Number>{
.......}public static void fun(Cas<?> t1,Cas<?> t2){
double sum = 0.0;
sum = t1.getVar().doubleValue()+t2.getVar().doubleValue();
System.out.print(sum+" "+(t1.getVar()+t2.getVar()));
},大家说的都很对,java和c++还是有点区别的
}