[英]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
類型接受參數
以下是我建議的步驟。
public @interface Permission
讓用戶使用該注釋為其每個權限枚舉注釋:
@Permission public enum ConcretePermissionEnum {..}
使您的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.