Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型和对象_Java_Generics_Wildcard - Fatal编程技术网

Java泛型和对象

Java泛型和对象,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

我正在研究《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 = 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

中的字符串值的原因。为什么不全部尝试一下呢?你说的“生成场景”是什么意思?只要编译,它就有意义。你想将任何类型推送到
堆栈中并不少见>对象