当前位置: 首页 > 知识库问答 >
问题:

返回具有上限的泛型列表

澹台俊材
2023-03-14

如果我有这样的方法:

public static <E extends CharSequence, T extends E> List<T> doIt(List<E> nums) {
return null;
}

为什么要编译这个代码?为什么超级字符串与T兼容扩展了CharSequence

public static void main(String[] args) {

    List<CharSequence> in = new ArrayList<>();

    List<? super String> result = new ArrayList<>();

    result = doIt(in);        
}

共有1个答案

百里承业
2023-03-14

代码工作是因为<?超级字符串><?扩展CharSequence>不是互斥的界限;StringCharSequence都符合这两个要求。

请注意,即使有些类符合一个约束而不符合另一个约束(例如StringObject,但它不扩展CharSequence),只要两个约束的交集不为空,它也可以工作。

相比之下,这是行不通的:

import java.util.*;
class Test {

   public static <E extends CharSequence, T extends E> doIt(List<E> in) {
     return null;
   }

   public static void main(String[] args) {
      final List<CharSequence> in = new ArrayList<>();
      final List<? super Integer> out = doIt(in);
   }
} 
 类似资料:
  • (沙盒) 获取此错误: 类型“number”不可分配给类型“T”“number”可分配给“T”类型的约束,但“T”可以用约束{}的不同子类型实例化。(2322)输入。ts(1,26):预期类型来自此签名的返回类型。 我希望typescript能够自动推断T为数字,然后直接使用它。为什么它在抱怨?写这样的东西的正确方法是什么?谢谢

  • 问题内容: 对于一个抽象类,我想定义一个为子类返回“ this”的方法: 我希望能够执行以下操作: 可以说香蕉面包会抛出一个IllegalArgumentException消息“不是蛋糕!”。 问题答案: 编辑 要求子类以某种方式表现是没有问题的,这超出了静态类型可以检查的范围。我们一直在这样做-一页又一页的普通英语指定您如何编写子类。 提出的另一种具有协变返回类型的解决方案必须做同样的事情-用简

  • 问题内容: 我为缓存编写了一个函数来检索特定对象。这样我就不需要投了。 我正在这样使用 但是现在我的缓存中有一个字符串列表,我不能这样使用 问题是。我对Java非常陌生,我该怎么写? 问题答案: 您无法获得的类,在您的情况下,唯一的方法是:

  • 我正在尝试返回一个对象,它应该是IClass的一个实现,具有一个通用类型,是IType的一个实现。 我要返回的实际类扩展了Class (abstract ),其泛型类型为ActualType: 抽象类对象实现了IClass接口,可以有任何扩展IType的类型 ActualType只是实现了IType接口 我在编译时得到一个“类型不匹配:无法从ActualClass转换为IClass”错误。我不明白

  • 我试图在静态编程语言中创建一个非常简单的泛型NDArray类,它将lambda表达式作为初始化函数。 典型的用法是: 我的问题是Kotlin编译器抱怨构造函数中值的初始化 通过说“不能使用‘T’作为具体化类型参数。改用类”。为什么? 编辑: 如果我用我自己的MyArray替换静态编程语言Array实现,它会编译: 不确定为什么静态编程语言对待MyArray与常规数组不同,当两者具有相同的构造函数时

  • 这是一个来自第三方库API的真实示例,但经过了简化。 用Oracle JDK 8U72编译 考虑以下两种方法: 两者都报告了一个“未经检查的强制转换”警告--我知道原因了。让我困惑的是为什么我可以打电话 试图传递会出现错误,正如所料: 如果报告为错误,为什么不是?