【发布时间】:2019-09-25 13:08:54
【问题描述】:
假设我在一个 util 类中有一个方法,该方法有一个不能在方法中更改的参数,因为它会改变结果并且需要以某种方式保存,如果这样做是一个不好的做法吗? util 类中的private static 字段?如果是的话如何正确地做到这一点。
我的意思是这样的:
public class Util {
private static final int[] vector1Backup = new int[3];
private static final int[] vector2Backup = new int[3];
private Util() {
}
public static void doOperation(int[] vector1, int[] vector2, int[] result){
// backups needed for the case that vecto1 or vector2 = result
vector1Backup[0] = vector1[0];
vector1Backup[1] = vector1[1];
vector1Backup[2] = vector1[2];
vector2Backup[0] = vector2[0];
vector2Backup[1] = vector2[1];
vector2Backup[2] = vector2[2];
result[0] = vector1Backup[0] + vector2Backup[2];
result[1] = vector1Backup[1] + vector2Backup[1];
result[2] = vector1Backup[2] + vector2Backup[0];
}
}
编辑:只存在一个线程
【问题讨论】:
-
如果两个线程同时调用
doOperation方法会发生什么? -
@KevinO 我认为更好的问题是,不会发生什么? :P
-
是的,这很糟糕。实用程序类不应该保持状态。在单个方法中处理所有内容或构建一个 calculator 对象,您可以在其中进行仅用于单一用途的计算(创建对象、进行计算、销毁对象)。
-
您不修改的私有静态 final 字段很好。私有静态可变字段是主要的代码异味。
-
只要它的单线程和你的字段用作计算的临时结构,我看不出有什么问题。还有其他库以相同的方式工作。例如 LibGDX。它使用临时向量和矩阵来计算事物以防止过多的实例化。
标签: java access-modifiers