在java中将泛型参数转换为int,前提是它是一个数字

在java中将泛型参数转换为int,前提是它是一个数字,java,generics,Java,Generics,简而言之,以下是我一直试图做的事情: class example <T extends Number> { private int function(T number) { int x = (int) number; ... } ... } 类示例 { 专用整数函数(T编号) { 整数x=(整数)个数; ... } ... } 基本上,我试图使它成为一个数字,这样我就可以将它转换成函数中的int。问题是我得到了一个“

简而言之,以下是我一直试图做的事情:

class example <T extends Number>
{
    private int function(T number)
    {
        int x = (int) number;
        ...
    }
    ...
}
类示例
{
专用整数函数(T编号)
{
整数x=(整数)个数;
...
}
...
}
基本上,我试图使它成为一个数字,这样我就可以将它转换成函数中的int。问题是我得到了一个“不可转换类型”错误,所以我一定是做错了什么。

使用

x=number.intValue();

考虑到抽象类
Number
是类的超类 *
BigDecimal
BigInteger
, *
字节
双字节
浮点
, *
整数

如果要使用int表示,应使用
.intValue()
函数


如果你想这样做的话。

举个例子,我认为你不需要泛型。我想你可以:

private int func(Number n) {
  return n.intValue();
}

如果你想用泛型做点什么,我现在就把它取出来,首先让上面的部分发挥作用。

我知道这个问题已经很老了。仅出于实践目的(不建议在生产中使用),您可以使用包装器类Integer而不是基元类型int

int x = (Integer) number;

关键是将泛型类型转换为基元类型会引发错误,包装类(如Number、BigInteger或Integer)更有效。

这在很多情况下都不起作用。当传入一个
biginger
时会发生什么?你是对的,因此我提到它应该只用于实践。我的观点是,将数字强制转换为基元类型将不起作用,使用诸如BigInteger、Integer或Number之类的包装类更有意义。或者如VonC所述,
Number.toIntValue()