簡體   English   中英

在抽象類上實現ID的一種優雅方法

[英]A elegant way to implement ID on a abstract class

我有一個抽象類。 我希望每個實例都有唯一的ID。 我已經實現了:

public abstract class MyAbstractClass{

    static AtomicInteger nextId = new AtomicInteger();
    private int id;

    public MyAbstractClass() {
        id = nextId.incrementAndGet();
    }
}
public class MyClass extends MyAbstractClass {

       public MyClass(){
             super();
       }
}

除了沒有什么可以強迫子類調用構造函數的部分以外,此方法有效。

有沒有一種方法可以為抽象類實現全局ID?

沒有什么可以強迫子類調用構造函數。

除非父構造函數在層次結構上錯誤構建,否則您無法阻止子類調用super()

所謂“層次錯誤”,是指存在一個不基於其無參數構造函數的父構造函數。 例如,

public MyAbstractClass() {
    id = nextId.incrementAndGet();
}

public MyAbstractClass(String s) {
    // ignores to call this();
}

否則,任何孩子最終都會調用super() ,從而觸發您的id初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM