Java泛型和对象
我正在研究《Java编程入门》中的实践问题,包括《数据结构》,第十一版,Y.Daniel LiangJava泛型和对象,java,generics,wildcard,Java,Generics,Wildcard,我正在研究《Java编程入门》中的实践问题,包括《数据结构》,第十一版,Y.Daniel Liang 19.24 Which of the following can be used to replace YYYYYYYY in the following code? public class WildCardDemo3 { public static void main(String[] args) { GenericStack<String> stack1 = n
19.24 Which of the following can be used to replace YYYYYYYY in the following code?
public class WildCardDemo3 {
public static void main(String[] args) {
GenericStack<String> stack1 = new GenericStack<>();
GenericStack<Object> stack2 = new GenericStack<>();
stack2.push("Java");
stack2.push(2);
stack1.push("Sun");
add(stack1, stack2);
WildCardDemo2.print(stack2);
}
public static <T> void YYYYYYYY {
while (!stack1.isEmpty())
stack2.push(stack1.pop());
}
}
A. add(GenericStack<T> stack1, GenericStack<T> stack2)
B. add(GenericStack<? extends T> stack1, GenericStack<T> stack2)
C. add(GenericStack<T> stack1, GenericStack<? super T> stack2)
D. add(GenericStack<T> stack1, GenericStack<Object> stack2)
19.24以下哪项可用于替换以下代码中的YYYY?
公共类通配符demo3{
公共静态void main(字符串[]args){
GenericStack stack1=新的GenericStack();
GenericStack stack2=新的GenericStack();
stack2.push(“Java”);
堆栈2.推送(2);
1.推(“太阳”);
添加(stack1、stack2);
通配符demo2.打印(stack2);
}
公共静态无效YYYYYY{
而(!stack1.isEmpty())
stack2.push(stack1.pop());
}
}
A.添加(GenericStack 1,GenericStack 2)
B.添加(GenericStack你是对的,D有效。唯一不起作用的是A。
您可以通过编写代码并运行它来检查它。选项A不编译(在add(stack1,stack2)
行),因为在这种情况下,编译器要求两个堆栈具有完全相同的泛型类型。实际上,我们有String
和Object
,它们是不同的
选项B编译。它实际上变成:
void添加(GenericStack堆栈1,GenericStack堆栈2)
字符串
扩展对象
。满足通配符限制
选项C编译。它实际上变成:
void添加(GenericStack堆栈1,GenericStack堆栈2)
对象
是Java中所有类的超类,包括字符串
。满足通配符限制
选项D编译。它实际上变成:
void添加(GenericStack堆栈1,GenericStack堆栈2)
Object
类比String
类更宽。这就是为什么GenericStack stack2
可以包含GenericStack stack1
中的字符串值的原因。为什么不全部尝试一下呢?你说的“生成场景”是什么意思?只要编译,它就有意义。你想将任何类型推送到堆栈中并不少见>对象
。