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学习中那,不太明白这是什么问题

解决方案 »

  1.   

    i1.getNum()拿到的是T类型啊,的转成String才能用+连接
    或者你传Info<String> i1, Info<String> i2,告诉编译器我装的就是String
      

  2.   

    编译器不知道你的类型T是什么,所以不能应用+操作符,但你i1.getNum()+" "+i2.getNum(),+知道操作的是字符串,所以就不会有问题
      

  3.   

    请问int型没问题是怎么回事,就是string不可以,既然可以计算int型的也可以计算string吧??
      

  4.   

    请问int型没问题是怎么回事,就是string不可以,既然可以计算int型的也可以计算string吧??不好意思,写错了,我在改改 吧,
      

  5.   

    System.out.println(i1.getNum()+" "+i2.getNum());对于这个来说,因为其中有String类型,所以会使用字符串相加,对i1.getNum()和i2.getNum()使用toString方法。如果去掉" ",会直接以当前的类型(也就是T)相加,因为T不能做+运算,所以报错。实质上只要有String类型,就会将其他类型转为String处理,比如"1" + 1..
      

  6.   

    没见过这种写法public static <T> T[] fun1(T... arg)
      

  7.   

    我觉得应该是这个原因
    你写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()
      

  8.   

    这个写法用过,其实在类实现都是可以,只不过在主方法中实现了。谢谢大家了问题已经解决
    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++还是有点区别的
    }