gpt4 book ai didi

java - List 和 List 之间有什么区别?
转载 作者:行者123 更新时间:2023-11-30 01:52:49 27 4
gpt4 key购买 nike

当一个方法将List of Object[]作为输入时,即使在运行时实际输入是List of Object,该方法仍然可以。问题是,对于 Java 中的泛型,List<something> 是什么意思?真正的意思和 List<Object[]> 有什么区别和List<Object>


/*
* if name is "A", then the input is a List<Object[]>
* if name is "B", then the input actually is a List<Object>
*/
public List<String> convert(List<Object[]> objectList, String name) {

List<String> resultList = new ArrayList<String>();

if (StringUtils.equals(name, "A")) {
for (Object[] object : objectList) {
String code = StringUtils.join((String) object[0], (String) object[1]);
resultList.add(code);
}
return resultList;
}

else if(StringUtils.equals(name, "B")) {
for (Object object : objectList) {
String code = (String) object;
resultList.add(code);
}
return resultList;
}
}

实际上在运行时,这个方法工作得很好并且同时接受 List<Object[]>List<Object> .

只是想知道有人可以解释一下这是如何工作的。

最佳答案

所以按顺序回答:

  1. 对于 Java 中的泛型,List<something> 的作用是什么?真的是什么意思? <>括号表示法允许您指定您想要的通用类的特定类型。基本上,一个 List可以是List<A> , List<B>等:其内容可以是任何内容。写作List<Q>说它是 List其中包含 Q 类型的内容.

  2. List<Object[]> 有什么区别和List<Object> ?[]是数组运算符。一个List<Object[]>是一个包含 Object 数组的列表。一个List<Object>是一个包含 Object 的列表s。在 Java 中,almost everythingObject ,包括数组!

这里还有一件事需要注意:Java 泛型很复杂(而且很有趣),并且有一种称为“类型删除”的东西,这意味着在运行时,List<Object>List<XYZ>两者都变成List - 没有具体类型!括号中的内容仅在编译时使用 - 基本上,用于检查您编写的内容是否正确。请参阅What does angle brackets T mean in JavaJava generics type erasure when and what happens

<小时/>

为什么你的代码会运行?嗯,在"A"情况很简单。在运行时,参数只是 List ,但您的代码期望找到 Object[]就在那个列表中,确实如此。在 "B"如果情况更复杂:参数只是 List ,然后迭代其内容将它们视为 Object 。这很好,因为正如我们上面所说(几乎)一切都是 Object 。然后,您将那些对象转换到 String - 如果我们不考虑运行时输入List,这才是奇怪的是无类型的。就 Java 而言,该列表中可能有任何内容,并且您告诉它String s。因为输入实际上是 String 的列表,一切顺利。

有趣的一点(您没有包含在代码中)是如何调用一个采用 List<Object[]> 的方法。与 List<String> Java 在编译时不会提示。

关于java - List<Object[]> 和 List<Object> 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55483548/

27 4 0