Eclipse(Java) - 自动为类生成唯一ID(非实例)

时间:2018-06-18 20:05:37

标签: java eclipse static uid

我想创建一种情况,其中一组类(从相同的基类继承)都具有不同的唯一ID。 ID属于类,而不属于它的实例。 ID不应该对代码更改敏感(因此基于某些属性的ID的运行时计算是不可能的)。 此外,我需要它对类adition不敏感,这意味着,一旦一个类获得一个ID,即使我移动类,更改它的名称或使用代码,它也将是相同的ID 此外,我需要它是程序员证明,因此ID将自动生成(通过eclipse),如果意外地使用两次 - 我将得到一个错误。 如果可能的话,我想将ID连接到一个枚举,该枚举将为每个可能的ID提供唯一值,但这是次要目标。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您必须在基类和生成方法中创建缓存:

public class Base {
    private static final Set<Integer> GENERATED_IDS = new HashSet<>();

    protected static int generateId(Class<? extends Base> subClass){
        final int id = subClass.getName().hashCode();
        if(GENERATED_IDS.contains(id)){
            throw new InstantiationError("id '" + id+ "' already used");
        }
        GENERATED_IDS.add(id);
        return id;
    }
}

我在这里使用了一个简单的getName().hashCode()。对于您将要创建的每个课程,这将是独一无二的。 (没有类可以命名相同并放在同一个包中)

public class Sub extends Base {
    public static final int ID = Base.generateId(Sub.class);
}

所以你有一个很好的id分布,实际上就是subClasses的Class对象的hashCodes。

  

注意:hashCode仍然可以变化,具体取决于默认的字符集