gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:55:28 25 4
gpt4 key购买 nike

我目前正在使用两个类,它们都代表一个数据结构(就像一个特殊的缓冲区,但为了在这个例子中保持简单,我们只假设三个字段)在本地类型上工作;一个是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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com