簡體   English   中英

使用反射使用類方法

[英]Use Class methods using reflection

所以我認為我的設計有點混亂,這就是我得到的。

我的應用程序需要大量枚舉,每個枚舉包含多個初始化的對象和一個“獲取最佳”方法。

enum MyNumberEnum{
First("First", 1)
Third("Third", 3)

public String name;
public int num;

MyNumberEnum getBest(int num){
            MyNumberEnum bestNumber = First;
        for (MyNumberEnum number: MyNumberEnum.values()) {
            if (number.num <= num)
                bestNumber = number;
        }
        return bestNumber ;
}
}

所有的枚舉都具有相同的 getBest 並且都應該有字段 num,因為枚舉不能擴展,所以認為接口可能在這里有所幫助,但是如果枚舉實現了一個接口,那么它的每個實例只是實現了枚舉本身,而不是它的枚舉。

public abstract class Best {

public abstract Enum<?> getBest(int num);
}

class MyNumberClass extends Best {
    public abstract Enum<?> getBest(int num){return MyNumberEnum.getBest(num)}
}

所以我想也許創建一個類並在里面放 Enum,然后我可以擴展 get best 方法。

所以為了方便使用,我創建了一個 HashMap 然后添加了 map.put("Number", MyNumberClass.class)

但是后來我得到了 Class 對象,我如何使用它的 getBest 方法?

感謝並為我的愚蠢感到抱歉!

使用文檔: https : //docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html

我用過: return (Enum)enumMap.get(enumName).getDeclaredMethod("getBest", Script.class).invoke(null, api);

認為它是從 Best 類繼承而來的,並且是靜態方法。 它可以使用更簡單的東西,比如 .getBest() 顯然它不能。

謝謝@空指針

暫無
暫無

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

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