簡體   English   中英

覆蓋Java枚舉中的泛型方法

[英]Override generic method in Java enum

為了向公共方法的每個枚舉實例提供特定行為,我們可以執行以下操作:

public enum Action { 
    a{
        void doAction(...){
            // some code
        }

    }, 
    b{
        void doAction(...){
            // some code
        }

    }, 
    c{
        void doAction(...){
            // some code
        }

    };

    abstract void doAction (...);
}

有沒有辦法給枚舉中定義的抽象泛型方法賦予特定的實現?

例如:

abstract<T> T doAction (T t);

我在其他問題中讀到它應該是不可能的,但我一直在努力尋找變通方法,並提出了過於復雜的裝置。 也許仿制葯不是正確的方法。 有沒有更簡單的方法來實現這一目標?

是的,你可以做到。 只要按原樣保留抽象方法定義,並在每個枚舉常量中,您必須執行以下操作:

a{
    @Override
    <T> T doAction(T t) {
        //your implementation
    }
}...

但是,請注意, T的類型參數a常數不一樣T的類型參數b不變等。

完成后,您可以像這樣使用它:

String string = Action.a.<String>doAction("hello");

要么

Integer integer = Action.b.<Integer>doAction(1);

此處明確提供類型是完全可選的,因為編譯器將根據提供的參數的類型推斷結果類型。

暫無
暫無

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

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