我有一个大约以 60 fps 运行的游戏循环。在每次迭代中,我需要从我的实用程序类Physics中调用一堆方法。看起来像这样
public final class Physics {
private static final float G = 9.81f;
private static Vector2D var1 = new Vector2D();
private Physics() {
}
public static Vector2D method1(param1, param2, param3) {
/*
* Do some computations with param1, param2 and param3,
* then assign the result to var1
*/
return var1;
}
}
这种设计模式的优点和缺点是什么?像我在上面的代码中所做的那样使用 var1 作为辅助实例变量是否很好,因为如果我将它放在 method1()
中就像下面这样
public static Vector2D method1(param1, param2, param3) {
Vector2D var1 = new Vector2D();
/*
* Do some computations with param1, param2 and param3,
* then assign the result to var1
*/
return var1;
}
每秒我都会获得 60 个 Vector2D
类型的新对象我想避免垃圾收集。
最佳答案
我总是尝试最小化变量范围(为了可读性),除非有充分的理由不这样做或者有显着的性能优势。在这种情况下,我假设 Vector2D 不会使用太多开销,并且创建静态变量的性能优势可能可以忽略不计。
因此,如果您不打算从 method1 之外的其他地方访问 var1,我会推荐您的第二种设计模式。如果可能的话,您不必在方法内声明变量,如下所示:
public static Vector2D method1(param1, param2, param3) {
// Do some computations, compute x and y, then assign the result to var1
return new Vector2D(x, y);
}
归根结底,这是个人品味的问题。
关于java - 创建返回类型的静态实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300423/