sách gpt4 ai đã đi

Danh sách<> không hoạt động như mong đợi

In lại 作者:行者123 更新时间:2023-11-29 09:49:11 32 4
mua khóa gpt4 Nike

phân phát Danh sách<đối tượng="">đến List工作正常。

phân phát List<>>đến List>不编译。

Mã số

public class Main {
public static void main(String[] args) {
// works fine
List listOfObject = new ArrayList<>();
takeListSuperString(listOfObject);

// doesn't compile
List<>> listOfListOfObject = new ArrayList<>();
takeListOfListSuperString(listOfListOfObject);
}

static void takeListSuperString(List listSuperString) {

}

static void takeListOfListSuperString(List> listOfListSuperString) {

}
}

câu hỏi

为什么不 List>工作方式与 List 相同?

另外,知道在哪里可以查找此类内容吗?

一个相关的问题是Generics hell: hamcrest matcher as a method parameter .但我觉得那里的答案没有帮助。

biên tập

我必须仔细考虑JB Nizet's answer在我终于得到它之前几个小时。所以我会在这里稍微扩展一下。也许这会对其他人有所帮助。

假设分配一个 List<>>đến List>是可能的,下面的代码将编译:

// can only contain instances of CharSequence
List<>> listOfListOfCharSequences = new ArrayList<>();

List> listOfListSuperString = listOfListOfCharSequences;

// add a list of objects containing an Integer
List listOfObjects = new ArrayList<>();
listOfObjects.add(123);
listOfListSuperString.add(listOfObjects);

// Ups.. exception at runtime we are getting an Integer where we expect a CharSequence
CharSequence charSequence = listOfListOfCharSequences.get(0).get(0);

所以为了防止在运行时出现丑陋的异常,这是不允许的。

BẰNGhalex points out这是泛型协方差,与 List 相同不可分配给 Danh sách<đối tượng=""> .并使用 List>代码实际上会编译,因为 ? extends String防止 List.add()打电话。

1 Câu trả lời

bởi vì Danh sách<đối tượng="">List 不同. List持有一种您不知道的特定类型的对象,但它是 String 或 String 的父类(super class)或超接口(interface)。而 Danh sách<đối tượng="">是一个可以容纳任何类型对象的列表。

假设 ? super StringĐúngCharSequence .您会发现以下编译正常吗?

List<>> listOfListOfObjects = new ArrayList<>>();
List listOfObjects = new ArrayList();
listOfObjects.add(new Integer());
listOfListOfObjects.add(listOfObjects);
List<>> listOfListOfCharSequences = listOfListOfObjects; // WTF?

关于java - 列表<列表 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289847/

32 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com