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

Java:一个泛型,返回的Long与Number的子类型相同

赵英范
2023-03-14

我正在寻找一种将long或long转换为从Number派生的类型的方法:

public class IdentityConverter<ConvertedT extends Number> implements IBitcodeConverter<ConvertedT> {
    public IdentityConverter() {
    }

    @Override
    public ConvertedT FromBitcode(Long theBitcodeVal) {
        return new ConvertedT(theBitcodeVal.longValue());
    }

    @Override
    public Long ToBitcode(ConvertedT theConvertedVal) {
        // TODO Auto-generated method stub
        return theConvertedVal.longValue();
    }

}

问题在于FromBitcode方法。当前代码不起作用。如何从Long中获取ConvertedT,它是一个数字?当然有一个简单的方法可以做到这一点。。。

共有1个答案

荀正谊
2023-03-14

new ConvertedT不起作用,因为ConvertedT是一个类型变量

你需要提供一个类似于的函数

public class IdentityConverter<ConvertedT extends Number> implements IBitcodeConverter<ConvertedT> {
    private final Function<Long, ConvertedT> fn;

    public IdentityConverter(Function<Long, ConvertedT> fn) {
      this.fn = fn;
    }

    @Override
    public ConvertedT FromBitcode(Long theBitcodeVal) {
        return fn.apply(theBitcodeVal);
    }

    // ...
}

 类似资料:
  • 我在我的Java程序中写了这个函数: 这就是我所说的: 它是有效的,但我觉得我应该能够省略第一个参数,并从返回类型(结果被分配到的类型)推断出它。这可能吗?如果是,语法是什么?

  • 问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的

  • 问题内容: 我想创建一个比较数字的方法,但可以有一个输入,它是Number的任何子类。 我已经考虑过以以下方式进行此操作… 在进行比较之前,我需要获取实际的原始指令,Number类具有为每个原始指令检索此指令的方法,但是我想选择一种正确的方法。 这可能吗? 干杯 问题答案: 不幸的是,如果不依靠if / else块,就无法从包装器类型中获取原始类型。 问题在于,不可能以通用方式实现这种方法。以下是

  • 我想使返回数据类型的的函数与传入的参数的数据类型相同。例如,我会这样调用函数: 因为我将一个传递给,所以它返回了一个

  • 我试图创建一个Java方法,它接受一个对象类型和它应该转换成的数据类型。 例如,如果我应该能够返回一个值1作为Int或双根据需要。我使用类传递数据类型作为参数。 问题:如何使方法泛型以接受基于输入参数的返回类型? 下面的代码只是一个示例,它可能在语法上不正确,用于解释我的问题。

  • 我想让一个函数返回一个保证实现两个接口的对象。编译时不一定知道确切的对象。我的代码看起来像: 在尝试编译时,我遇到以下错误: 你好世界java:13:错误:不兼容的类型:C无法转换为T 返回新的C() ^ 其中T是一个类型变量: T扩展了方法f(布尔值) HelloWorld中声明的a,B。java:14:错误:不兼容的类型:D无法转换为T 返回新的D() ^ 其中T是一个类型变量: T扩展了方法