2014-02-17 15 views
0

我有一個接口ParentInterface,並有多個枚舉實現它:ChildEnum1ChildEnum2。我有一個方法,我通過ParentInterface作爲參數。從java的父接口獲取枚舉大小

根據什麼ChildEnum傳遞給此方法,我想獲得枚舉的大小。我怎樣才能做到這一點? values.length()方法僅適用於enums,但我們僅將ParentInterface傳遞給調用者。

我們該如何做到這一點?

+1

約definining一個'尺寸()''中的方法ParentInterface'什麼? – fge

+0

@fge:我的枚舉有靜態方法,但接口不能有一個靜態的'size()'方法。 –

+0

但是,您不是在類上調用方法,而是在傳遞給方法的實例上。你不需要使size()方法成爲靜態的。 – Pshemo

回答

2

與反思,用Class#getEnumConstants()(快速和骯髒的演示):

package com.stackoverflow.so21821751; 

public class Test { 
    interface ParentInterface { 
     void someMethod(); 
    } 

    static enum ChildEnum1 implements ParentInterface { 
     FOO, BAR, LOL; 

     @Override 
     public void someMethod() { 
      // something 
     } 
    } 

    static enum ChildEnum2 implements ParentInterface { 
     FOO, BAR; 

     @Override 
     public void someMethod() { 
      // something 
     } 
    } 

    public static void main(final String[] args) { 
     foo(ChildEnum1.BAR); // 3 
     foo(ChildEnum2.FOO); // 2 
    } 

    private static void foo(final ParentInterface i) { 
     System.out.println(i.getClass().getEnumConstants().length); 
    } 
} 
+0

這是超好玩!另一方面,在建築方面,使用Reflection是一個很好的設計選擇?我聽說過人們從來沒有使用反思哲學,所以我不會將它用於任何核心業務邏輯。你的想法是什麼? –

+0

味道恕我直言,這比「反思」更「內省」。當你用它來做你不應該直接做的事情時(例如訪問一個私人領域,...),我會看到反射問題 – 2014-02-17 06:15:50

+0

有意義。謝謝。 –