gpt4 book ai didi

java - 在 Util 类中拥有私有(private)静态字段是不是很糟糕?

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:35 25 4
gpt4 key购买 nike

假设我在 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];
}

}

编辑:仅存在一个线程

最佳答案

一般来说,拥有私有(private)常量并不是一个坏习惯。隐藏类的内部是很好的,在 OOP 中我们称之为封装。不过我觉得你的代码应该稍微改变一下。

1) 就我个人而言,我完全反对静态方法,恕我直言,它们不遵循 OOP 并使测试变得更加困难。然而一堆库和java本身也有一堆。所以我想这只是品味问题。如果你喜欢静态方法,你应该将它们设置为无状态,这意味着不要在类中存储任何内容,只需根据 vector 1和 vector 2创建结果并从方法中返回它。

2)在静态类中存储某些内容很容易出错。我将创建单独的类并将其命名为 VectorBackup。在该类(class)中,我会像您一样存储 vector 。然后您可以创建所需数量的实例(备份)。它将是线程安全的(在某种程度上)并且更像 OOP。此外,如果您有 3 个 vector 而不是 2 个 vector ,则更改代码会更容易。

3)常量类应该有私有(private)构造函数,并且它们应该是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
}

}

关于java - 在 Util 类中拥有私有(private)静态字段是不是很糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56029907/

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