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

Java泛型说明(将T约束为类型,同时使用可比)

闻人宝
2023-03-14

如果我要创建一个类,并且该类只接受特定类型的数据。我将继续使用泛型,在这个类中,我将继续将类型约束到Number类的上界。

因此,这个类只能使用Number类的类型或Number的子类(整型、双型、长型等)。

现在假设我有一个这些类型的数组,我希望比较数组中的值。所以这个类只包含这些允许的数据类型的数组,我们希望只比较这些类型。

我们可以通过使用包含compareTo方法的comparable接口来实现这一点。只能对实现可比较接口的类使用compareTo方法。Number是实现此接口的类之一。

因此,如果我有一个类头,它指定了以下内容:

public class SomeName<T extends Number> {

这成功地暗示了类型T的约束,即只接受数字的类型或数字的子类。如果我想使用可比接口中的比较方法,哪个数字类实现,哪个T被约束。

如果我有这样的方法

public T someName(T[] SomeVariable) {

为什么这个方法不能使用compareTo方法呢?T被约束为Number类,该类实现了Comparable。

如果我有

 public <T extends Comparable<T>> someName(T[] SomeVariable) {

因为T扩展了comparable,这与T在泛型符号中实现comparable是一样的。。。这不是和上面说的差不多吗?

共有1个答案

商佑运
2023-03-14

Number不实现可比较的

要使用的东西是:

SomeName<T extends Number & Comparable<? super T>>

目前,您不能在实例方法中对T施加额外的限制,因此如果您编写

public <T extends Comparable<T>> T someName(T[] SomeVariable)

那实际上是一个不同的T

 类似资料:
  • 泛型的类型约束 swapTwoValues(_:_:)函数和Stack类型可以用于任意类型. 但是, 有时在用于泛型函数的类型和泛型类型上, 强制其遵循特定的类型约束很有用. 类型约束指出一个类型形式参数必须继承自特定类, 或者遵循一个特定的协议、组合协议. 例如, Swift的Dictionary类型在可以用于字典中键的类型上设置了一个限制. 如字典中描述的一样,字典键的类型必须是可哈希的. 也

  • 所以我有这样的课: 现在我正在寻找一个类型约束,它允许我使用所有可以是的类型参数。这意味着所有引用类型,以及所有()类型: 应该是可能的。 使用作为类型约束只允许我使用引用类型。 附加信息:我正在编写一个pipes and filters应用程序,并希望使用引用作为传递到管道中的最后一项,这样每个过滤器都可以很好地关闭,进行清理,等等。。。

  • 问题内容: 我是java泛型的新手,我的问题是: 在上面的语句中,当函数的返回类型为void时,为什么我们以前使用过?为什么此语法有效? 根据理论,方法本身可以是返回类型吗? 我的参考程序是 问题答案: 在这里没有什么做的返回类型; 这意味着这是一个通用函数,可以采用各种类型的数组。为了更容易理解,代码可能是这样的: 所以它告诉函数 “有一个通用类型,您接受的数组,因此,例如,如果我用您接受的通用

  • 我的代码是: 但是我在createTreeItem的返回类型上得到了一个错误,如下所示: TS2322:Type{id:string;children:never[];}'不可分配给类型“T”。 我完全不知道这意味着什么。 有什么帮助吗?

  • 我在typescript中有以下泛型类 但是我不知道为什么得到这个错误Class'(匿名类)'不正确地扩展基类'列'。属性getValue的类型不兼容。类型'(值:数字)=

  • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类