为每个对象实例分配唯一编号

时间:2014-01-17 12:02:30

标签: java multithreading swing testing squish

所以,我有一项任务是在一个相当大的项目中唯一地命名所有swing组件,命名约定为name_of_containing_classnumber_of_its_instance / name_of_variable_holding_component。所以我制作了一个自动搜索所有代码库的程序,并且在每次初始化swing组件之后,它都将它命名为approprietly。我从这个静态方法中获取实例编号:

public static int getInstanceNumber(Object instance) {
    if (instancesMap.get(instance.getClass()) != null) {
        List<Object> instances = instancesMap.get(instance.getClass());
        if (!instances.contains(instance)) {
            instances.add(instance);
            return instancesMap.get(instance.getClass()).size();
        } else {
            return instances.indexOf(instance) + 1;
        }
    } else {
        ArrayList<Object> instances = new ArrayList<Object>();
        instances.add(instance);
        instancesMap.put(instance.getClass(), instances);
        return instancesMap.get(instance.getClass()).size();
    }
}

我使用它像some_component.setName(className + getInstanceNumber(this)/ variable_name);

它完成了工作,我的问题是我需要这个命名在执行过程中保持一致。我需要注意什么才能确保线程不会妨碍,或者我如何以不同的方式处理它以避免在不同的执行中出现不同的命名问题(假设我们在应用程序中移动了相同的路径) 。

我需要这些名称用于挤压自动化测试,所以每次我们执行相同的测试时,我们需要相同名称的完全相同的摆动组件/

1 个答案:

答案 0 :(得分:1)

你将不得不完全重做这件事。在这个设置中,线程会让你失望,但如果有人改变了代码,它会重新编号调用此方法的所有内容。

我建议使用类的名称对名称进行硬编码,或者查看此要求背后的目标,看看是否有替代方案。