- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我理解 PECS(生产者扩展,消费者 super )的概念,但对这些符号仍然感到困惑:
public class PECSTest {
public static void main(String[] args) {
//List<? extends Object> ProducerList = new ArrayList<String>();
//ProducerList.add("1"); // Line 1 :compileTimeError
PECSTest myTest = new PECSTest();
List<String> myList = new ArrayList<String>();
myList.add("abc");
myTest.printMyList(myList);
}
private void printMyList(List<? extends Object> myList) {
// TODO Auto-generated method stub
int i=0;
while(i<myList.size()) {
System.out.println(myList.get(i).getClass()); //Line 2
System.out.println(myList.get(i).charAt(0)); // Line 3
System.out.println(myList.get(i).equals(new String("abc")));
i++;
}
}
}
对于消费者也是如此
List<? super Number> myList = new ArrayList<Object>();
myList.add(new Object());// compile time error
为什么我无法在 myList 中添加对象。因为如果我们使用 super ,则意味着该列表可以包含等于或大于 Java 类层次结构中的 number 的对象。因此 new Object() 应该按照该语句添加到列表中。
谢谢。
最佳答案
List
已经是泛型,因此您不应将其类型设置为泛型;如果您希望它接受所有类型,请将其类型设置为 Object
;另外,您不应该在实例化中指定类型,因为 Java 可以从类型声明中推断出它:
List<Object> ProducerList = new ArrayList<>();
感谢 Java Polymorphism , ProducerList
现在允许所有类型,因为所有类都是 Object
的特化类。
自 printMyList
的参数myList
接受不止一种类型,您必须在强制转换之前检查其传递的类型,以便调用其方法,例如charAt()
对于 String
:
if (myList.get(i) instanceof String) {
System.out.println(((String)myList.get(i)).charAt(0)); // Line 3
}
完整的工作代码:
import java.util.*;
class PECSTest
{
public static void main(String[] args) {
List<Object> ProducerList = new ArrayList<>();
ProducerList.add("1"); // Line 1
PECSTest myTest = new PECSTest();
List<String> myList = new ArrayList<String>();
myList.add("abc");
myTest.printMyList(myList);
}
private void printMyList(List<? extends Object> myList) {
int i=0;
while(i<myList.size()) {
System.out.println(myList.get(i).getClass()); //Line 2
if (myList.get(i) instanceof String) {
System.out.println(((String)myList.get(i)).charAt(0)); // Line 3
}
System.out.println(myList.get(i).equals(new String("abc")));
i++;
}
}
}
输出:
class java.lang.String
a
true
附注:为什么在 Number
上使用下限通配符(List<? super Number>
)?可能是List<? extends Number>
允许 Number
的每个子类相反,每个 Object
那不是Number
...
关于java - 泛型:LowerBounded 通配符与 UpperBounded 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59030590/
我正在尝试从如下所示的服务器响应中获取日期: "dateStart": "2019-08-21T14:54:03.285108Z", "dateEnd": "2019-09-20T06:15:03.2
下面是我试图运行的代码: class Student { def printDetails = println("I am a student") def printSomeOtherDeta
我正在尝试使用 spark-jdbc 读取 postgres 数据库上的表。为此,我想出了以下代码: object PartitionRetrieval { var conf = new Spa
在 Spark 中通过 JDBC 连接从 SQL Server 获取数据时,我发现我可以设置一些并行化参数,例如 partitionColumn , lowerBound , upperBound ,
我理解 PECS(生产者扩展,消费者 super )的概念,但对这些符号仍然感到困惑: public class PECSTest { public static void main(Stri
我想保护我的变量免于存储溢出值。 我正在计算树中每个级别和某些阶段的损失。 它给出类似 4.94567e+302 的值;这个值正确吗?如果我将它(如最小值、最大值等)与任何其他值进行比较。它会给出正确
已阅读 this question及其答案,我得出的结论是这两种算法没有标准实现。不过,首先要介绍一些背景知识: 我们大多数人都熟悉 binarySearch 。这个想法是,给定一个排序数组(或Col
let range = 3..<3 // lowerBound == upperBound Swift 标准库在多个地方使用这种类型的范围,例如在数组 insert(_, at:) 中方法。 Arra
我有一个类,我想用 for 循环在其中添加值。 这是我的课: public class Expandable { public var name: String public var
我尝试使用动画来关闭菜单,我决定在按下按钮时减小 UIScrollView 的大小,当大小减小到我想要的值时,然后将其隐藏。 为了在某些时候根据我想要的用户界面完成任务,我使用了“时间延迟功能”(给定
我是一名优秀的程序员,十分优秀!