public class G<x> {
x i;
}
public class E {
public static void main(String[] args) {
G<Integer> b1 = new G<Integer>();
G<String> b2 = new G<String>();
b1.i = 50;
b2.i = "start";
System.out.println(b1.i);
System.out.println(b2.i);
}
}
此案例与下面给出的其他案例有何不同
public class G<x> {
x i;
}
public class E {
public static void main(String[] args) {
G b1 = new G();
G b2 = new G();
b1.i = 50;
b2.i = "start";
System.out.println(b1.i);
System.out.println(b2.i);
}
}
我知道,当您创建 G 类的对象时,我们必须为泛型定义类型参数,但如果不传递类型参数,它将起作用..将显示输出。那么为什么我的老师说 Type 参数很重要,尽管代码没有它也可以运行。
两种情况都有所不同。在第一种情况下,我们通过引用变量 b1 传递整数类型参数,通过 b2 引用变量传递字符串类型参数,但在第二种情况下,我们不这样做。如果不这样做,在第二种情况下,数据类型将是对象类型。两个代码都会给你相同的答案,但我的老师说你必须始终使用 1case 。所以我的问题是他为什么这么说,因为两个代码都会给你相同的答案,所以为什么我们不能使用 2case
我假设你实际上的意思是编译:
G b1=new G();
G b2=new G();
b1.i=50;
b2.i="start";
System.out.println(b1.i);
System.out.println(b2.i);
这恰好可以工作,因为 PrintStream.println
具有 Object
的重载,因此将采用任何对象。通常你会想调用一个更有趣的方法。
顺便说一句,仍然可能存在差异。由于 PrintStream
的特殊设计,此代码将执行不同的操作。
G b1=new G();
G<char[]> b2=new G<>();
b1.i="start".toCharArray();
b2.i="start".toCharArray();
System.out.println(b1.i);
System.out.println(b2.i);
您将收到警告。通常,您希望将警告视为错误。
我是一名优秀的程序员,十分优秀!