gpt4 book ai didi

java - 保护静态类变量

转载 作者:行者123 更新时间:2023-12-03 18:36:44 27 4
gpt4 key购买 nike

我有一个相当简单的静态变量问题。我正在构建一个松散地遵循路径或 RMI 的解决方案。在我的服务器上,我有一个将执行“任务”的 ComputeEngine 类(具有“执行”方法的类实例)。但是,ComputeEngine 将包含一个全局变量,需要由不同的任务访问,每个任务都在自己的线程中执行。授予访问权限的最佳方式是什么?我想让一切都尽可能松耦合。我的 ComputeEngine 类中的共享全局静态变量将是一个列表。我应该有这个静态变量的 setter/getter 吗?我将在我的 ComputeEngine 类中有一个读/写锁,以授予对我的全局列表的访问权限。这也将是静态的,需要共享。我正在寻找有关如何在类中提供对全局静态变量的访问的最佳实践。

最佳答案

如果要解耦,最好的办法是在创建Task时传入一个回调对象。

interface FooListManipulator {
void addFoo( Foo f );
List<Foo> getFooList();
}

class Task {
private FooListManipulator fooListManipulator;

public Task( FooListManipulator fooListManipulator ) {
this.fooListManipulator = fooListManipulator;
}
}

这样任务本身就不必假设任何关于它的创建者和列表存储方式的信息。

在您的 ComputeEngine 中,您将执行如下操作:

class ComputeEngine {

private static List<Foo> fooList;

class Manipulator implements FooListManipulator {
public void addFoo( Foo f ) {
synchronized( fooList ) {
fooList.add( f );
}
}

public List<Foo> getFooList() {
return Collections.unmodifiableList( fooList );
}
}

private Task createTask() {
return new Task( new Manipulator() );
}
}

如果你以后想改变 fooList 的存储(你真的应该考虑一下,因为静态全局变量不是一个好主意),Task 将保持不变.此外,您还可以使用模拟操纵器对 Task 进行单元测试。

关于java - 保护静态类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172828/

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