当前位置: 首页 > 面试题库 >

Java泛型和Number类

习海
2023-03-14
问题内容

我想创建一个比较数字的方法,但可以有一个输入,它是Number的任何子类。

我已经考虑过以以下方式进行此操作…

public static <T extends Number> void evaluate(T inputNumber) {
  if (inputNumber >= x) {
    ...
  }
}

在进行比较之前,我需要获取实际的原始指令,Number类具有为每个原始指令检索此指令的方法,但是我想选择一种正确的方法。

这可能吗?

干杯


问题答案:

不幸的是,如果不依靠if / else块,就无法从包装器类型中获取原始类型。

问题在于,不可能以通用方式实现这种方法。以下是一些可以在Number类中找到的似乎可行的方法:

public abstract X getPrimitiveValue();

这样很好,不是吗?但是这是不可能的。有没有可能的X可能是一个抽象intfloatdouble等。

public abstract Class<?> getCorrespondingPrimitiveClass();

这也无济于事,因为无法实例化原始类。

因此,您可以做的对所有类型通用的唯一事情就是使用longValue()or
doubleValue()方法,但是如果处理错误的类型,则两种方法都会丢失信息。

所以不:Java数字层次结构不适合以一般方式解决此类问题。



 类似资料:
  • 问题内容: 我想用泛型和varargs实现一个函数。 这里的意图是断言传递给该函数的所有参数都是扩展作为第一个参数给出的Class的Class对象。因此main方法的前两行将进行编译,而第三行将生成错误。 我的问题是: 为什么前两行会显示“类型安全性:为varargs参数创建了Class的通用数组”消息? 我在这里想念什么吗? 附加问题: 如何重新设计它以防止在调用“ doNastyThingsT

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 我正在寻找一种将long或long转换为从Number派生的类型的方法: 问题在于方法。当前代码不起作用。如何从中获取,它是一个?当然有一个简单的方法可以做到这一点。。。

  • 问题内容: 我有一个代表文本片段的泛型类。该文本片段可能具有多种不同模式(突出显示的不同类型)中的任何一种。这些模式用枚举表示。每个项目的Enum可能不同,但是它必须实现一个接口,该接口提供了一种将其中两个结合的方法(可以突出显示并加粗显示)。所以我有一个界面: 然后我的TextFragment是文本字符串和模式的容器。但是当我尝试声明该类时: 我收到以下错误: 令牌“扩展”的语法错误,预期 根据

  • 问题内容: 这件事让我困扰了一阵子。我之前曾问过一些问题,但措辞可能很拙劣,而且例子太抽象了。所以目前尚不清楚我实际上在问什么。我会再尝试。并且请不要下结论。我希望这个问题根本不容易回答! 为什么我不能在Java中使用带有泛型类型参数的枚举? 问题不在于语法上为什么不可能做到这一点。我知道这只是不受支持。问题是:为什么JSR人员会“忘记”或“忽略”这个非常有用的功能?我无法想象与编译器相关的原因,

  • 这可能是一个愚蠢的问题,所以请原谅我的无知。 如果我用: 编译器说foo.execute(val)是一个错误。带有一条沿着setWrapped方法(bar )行的消息,类型为foo 不适用于参数(bar )。 如果我想把福变成