java - Java 中 native 类型(基元)的泛型(或替代方法)

标签 java generics primitive built-in-types

我目前正在使用两个类,它们都代表一个数据结构(就像一个特殊的缓冲区,但为了在这个例子中保持简单,我们只假设三个字段)在本地类型上工作;一个是long ,另一个为float (所以两者都适用于 native 类型)。为了避免代码重复,直接的方法是在类型 <T> 上实现泛型。然后有两个用户,一次是 <long>一次 <float> .

据我所知,这对于 native 类型是不可能的;仅适用于 Object 派生的对象.

有没有其他方法可以避免代码重复,否则不可避免?由于性能方面的原因,不能选择使用非 native 类型(例如 Integer )。

当前代码,精简为只有三个字段的最小示例:

public class TupleFloat {
  private float field1;
  private float field2;
  private float field3;
  public TupleFloat(float a, float b, float c) {
    field1 = a; field2 = b; field3 = c;
  }
  public float sum() {
    return field1 + field2 + field3;
  }
}

public class TupleLong {
  private long field1;
  private long field2;
  private long field3;
  public TupleLong(long a, long b, long c) {
    field1 = a; field2 = b; field3 = c;
  }
  public long sum() {
    return field1 + field2 + field3;
  }
}

使用泛型:

public class Tuple<T> {
  private T field1;
  private T field2;
  private T field3;
  public Tuple<T>(T a, T b, T c) {
    field1 = a; field2 = b; field3 = c;
  }
  public T sum() {
    return field1 + field2 + field3;
  }
}

但这不适用于 native 类型 ( Tuple<float> x; )。

有没有其他方法可以避免代码重复,否则不可避免?是否有解决此类问题的最佳实践?

最佳答案

对于基元来说这是不可能的。看一下一些内置 API,它们散布着针对不同原语的各种版本的方法。理论上,您可以拥有一个包含 6 个私有(private)变量和所有风格的类,但这似乎比两个单独的“干净”类更难看。

您也许可以使用 Lambda 来处理这个问题,但我不确定。

关于java - Java 中 native 类型(基元)的泛型(或替代方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28810798/

相关文章:

java - 使用通用和原始类型执行操作不起作用

ios - 使用通用协议(protocol),如何在一个 View Controller 中具有不同的关联值来确认协议(protocol)

Java - 最简单的是查找基元数组中是否存在某个位置?

java - 为什么可以将 int[] 转换为 Object,而不是 Object[]?

java - 如何解析/映射 JavaFX CSS 文件以检索其属性和值?

java - 为用户显示更好的错误消息

java - 带有输入参数的 orm.xml 命名查询

java - 创建通用 JavaBean 构建器

c++ - 原始数据类型的包装类

java - 如何在jsp页面中动态设置&lt;title&gt;