比方说,我在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];
}
}
编辑:只有一个线程存在
答案 0 :(得分:0)
通常,拥有私有常量并不是一个坏习惯。隐藏类的内部结构很好,在OOP中,我们称之为封装。但是我觉得您的代码应该进行一些更改。
1)就我个人而言,我完全反对静态方法,恕我直言,它们不遵循OOP,因此会使测试更加困难。但是,一堆库和java本身都有一堆。我想这就是味道。而且,如果您喜欢静态方法,则应使其无状态,这意味着不要在类内存储任何内容,只需基于vector1和vector2创建结果,然后从该方法返回即可。
2)在静态类中存储某些内容容易出错。我只是创建单独的类,并将其命名为VectorBackup。在该课程中,我将像您一样存储向量。然后,您可以创建所需数量的实例(备份)。这将是线程安全的(在某种程度上)和更多的OOP之类的。另外,如果您有3个向量而不是2个向量,更改代码也将更加容易。
3)常量类应具有私有构造函数,并且它们应为final
,因此没有人可以对其进行扩展。
public final class Util {
private Util() {
}
public static void doOperation(int[] vector1, int[] vector2) {
int[] result = new int[3];
result[0] = vector1[0] + vector2[2];
result[1] = vector1[1] + vector2[1];
result[2] = vector1[2] + vector2[0];
return result;
}
}
public class Backup {
private final int[] vectorBackup = new int[3];
public Backup(int[] vector) {
vectorBackup[0] = vector[0];
vectorBackup[1] = vector[1];
vectorBackup[2] = vector[2];
}
public int[] restore(){
//some code to create vector from backup
}
}
答案 1 :(得分:0)
拥有私有常量不是一个坏习惯。
但是,在您的情况下,您有一个私有字段(例如缓冲区)。另外,您可以进行所谓的就地操作,从而更改result
数组的值。
如果我是你,我将创建一个返回结果的函数
int[] doOperation(int[] vector1, int[] vector2){
int[] result = new int[vector1.length];
// do your logic
return result;
}