Java 将类型参数传递给泛型 公共类G{ xi; } 公共E类{ 公共静态void main(字符串[]args){ G b1=新的G(); G b2=新的G(); b1.i=50; b2.i=“开始”; 系统输出打印LN(b1.i); 系统输出打印LN(b2.i); } }
本案例与下文给出的其他案例有何不同Java 将类型参数传递给泛型 公共类G{ xi; } 公共E类{ 公共静态void main(字符串[]args){ G b1=新的G(); G b2=新的G(); b1.i=50; b2.i=“开始”; 系统输出打印LN(b1.i); 系统输出打印LN(b2.i); } },java,generics,Java,Generics,本案例与下文给出的其他案例有何不同 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";
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);
}
}
公共类G{
xi;
}
公共E类{
公共静态void main(字符串[]args){
G b1=新的G();
G b2=新的G();
b1.i=50;
b2.i=“开始”;
系统输出打印LN(b1.i);
系统输出打印LN(b2.i);
}
}
我知道,当您创建G类的对象时,我们必须为泛型定义类型参数,但如果不传递类型参数,它将工作..输出将显示。
所以为什么我的老师说类型参数很重要,尽管代码运行时也没有类型参数
这两种情况都有区别。在第一种情况下,我们通过引用变量b1传递整数类型参数,通过b2引用变量传递字符串类型参数,但在第二种情况下,我们没有这样做。在第二种情况下不这样做,数据类型将是对象类型。这两个代码都会给出相同的答案,但我的老师说你必须始终使用1个case。所以我的问题是他为什么这么说,因为两个代码都会给出相同的答案,所以为什么我们不能使用2个case呢?我想你的意思是,这个编译:
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);
}
}
这恰好是作为PrintStream工作的。println
对Object
有一个重载,因此将接受任何对象。通常你会想调用一个更有趣的方法
顺便说一句,仍然可能有差异。由于PrintStream
的特殊设计,此代码将做一些不同的事情
G b1=new G();
G b2=new G();
b1.i=50;
b2.i="start";
System.out.println(b1.i);
System.out.println(b2.i);
gb1=newg();
G b2=新的G();
b1.i=“开始”。toCharArray();
b2.i=“开始”。toCharArray();
系统输出打印LN(b1.i);
系统输出打印LN(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);
}
}
这恰好是作为PrintStream工作的。println
对Object
有一个重载,因此将接受任何对象。通常你会想调用一个更有趣的方法
顺便说一句,仍然可能有差异。由于PrintStream
的特殊设计,此代码将做一些不同的事情
G b1=new G();
G b2=new G();
b1.i=50;
b2.i="start";
System.out.println(b1.i);
System.out.println(b2.i);
gb1=newg();
G b2=新的G();
b1.i=“开始”。toCharArray();
b2.i=“开始”。toCharArray();
系统输出打印LN(b1.i);
系统输出打印LN(b2.i);
您将收到警告。通常,您希望将警告视为错误。第一种情况是类型安全的。 在第一种情况下,您已经声明
b1.i
只接受整数
,因此您不能错误地将i.e.字符串
赋给它。您可以信赖它包含整数
在第二种情况下,您可以将对象的任意子体指定到
b1.i
中,这样类型安全性就消失了。您不能如此确定b1.i
包含特定类型。第一种情况是类型安全的。
在第一种情况下,您已经声明b1.i
只接受整数
,因此您不能错误地将i.e.字符串
赋给它。您可以信赖它包含整数
在第二种情况下,您可以将对象的任意子体指定到
b1.i
中,这样类型安全性就消失了。您不能确定b1.i
包含特定类型。此代码与我的代码有很大不同。在您的代码中,2行将给出错误,但在我的情况下,在运行代码时,您将不会发现任何错误和例外。还有一件事G b2=new G();这样做你会得到结果。这一行b1.i=“start”.toCharArray()将显示什么内容;给出输出,以及为什么这个代码与我的不同。在您的代码中,2行将给出错误,但在我的情况下,在运行代码时,您将不会发现任何错误和例外。还有一件事G b2=new G();这样做你会得到结果。这一行b1.i=“start”.toCharArray()将显示什么内容;给出输出和原因