Java有钳位函数吗?

2022-08-31 14:36:54

假设我有一个,我通常这样做是为了“夹紧”它到一个范围,这里的范围。也就是说,如果它低于范围开始,则将其增加到范围开始,它高于范围结束,将其减小到范围结束。value[0..1]

clampedValue = Math.max(0, Math.min(1, value));

是否有任何内置功能用于夹紧到某个范围?


答案 1

是否有任何内置功能用于夹紧到某个范围?

不。


答案 2

在查看了另一个答案中提供的通用钳夹方法之后,值得注意的是,这具有基元类型的装箱/取消装箱注意事项。

public static <T extends Comparable<T>> T clamp(T val, T min, T max) {...}

float clampedValue = clamp(value, 0f, 1f);

这将使用包装类,从而产生 3 个 box 操作(每个参数一个),以及返回类型 1 个 unbox 操作。Float

为了避免这种情况,我会坚持写很长的手,或者对你想要的类型使用非泛型函数:

public static float clamp(float val, float min, float max) {
    return Math.max(min, Math.min(max, val));
}

然后,只需为所需的每个基元类型使用相同的方法进行重载即可。


推荐