簡體   English   中英

抽象的java枚舉

[英]abstract java enum

我編寫了一個應該依賴枚舉的庫,但實際的枚舉應該由我的庫的用戶定義。

在以下示例中, authorize方法需要枚舉類型Permission參數。

acl.authorize(userX, Permission.READ, Permission.WRITE)

我的庫應該能夠處理庫用戶定義的任意權限。 但是如果沒有Permission枚舉,我就無法編譯我的庫。 所以我需要類似的東西

abstract enum Permission

在我的圖書館。 有沒有解決方法來做到這一點?

我會使用枚舉然后實現的接口。 有點像

public interface PermissionType{}

例如,客戶端將使用它來定義諸如的枚舉

public enum Permission implements PermissionType
[...]

然后,您的API將使用PermissionType類型接受參數

以下是我建議的步驟。

  1. 寫一個注釋 - public @interface Permission
  2. 讓用戶使用該注釋為其每個權限枚舉注釋:

     @Permission public enum ConcretePermissionEnum {..} 
  3. 使您的authorize方法看起來像:

     public boolean authorize(User user, Enum... permissions) { for (Enum permission : permissions) { if (permission.getClass().isAnnotationPresent(Permission.class)){ // handle the permission } } } 

如果您希望Permission枚舉具有某些特定方法,或者只是想要“標記”,那么您可以使用戶枚舉實現您的接口(而不是注釋):

interface PermissionInterface {..}
enum ConcretePermission implements PermissionInterface

這將啟用編譯時而不是運行時檢查,與注釋方法一樣, authorize方法簽名如下所示:

public boolean authorize(User user, PermissionInterface... permissions)

暫無
暫無

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

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