我有一個接口ParentInterface
,並有多個枚舉實現它:ChildEnum1
和ChildEnum2
。我有一個方法,我通過ParentInterface
作爲參數。從java的父接口獲取枚舉大小
根據什麼ChildEnum
傳遞給此方法,我想獲得枚舉的大小。我怎樣才能做到這一點? values.length()
方法僅適用於enums
,但我們僅將ParentInterface
傳遞給調用者。
我們該如何做到這一點?
我有一個接口ParentInterface
,並有多個枚舉實現它:ChildEnum1
和ChildEnum2
。我有一個方法,我通過ParentInterface
作爲參數。從java的父接口獲取枚舉大小
根據什麼ChildEnum
傳遞給此方法,我想獲得枚舉的大小。我怎樣才能做到這一點? values.length()
方法僅適用於enums
,但我們僅將ParentInterface
傳遞給調用者。
我們該如何做到這一點?
與反思,用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);
}
}
這是超好玩!另一方面,在建築方面,使用Reflection是一個很好的設計選擇?我聽說過人們從來沒有使用反思哲學,所以我不會將它用於任何核心業務邏輯。你的想法是什麼? –
味道恕我直言,這比「反思」更「內省」。當你用它來做你不應該直接做的事情時(例如訪問一個私人領域,...),我會看到反射問題 – 2014-02-17 06:15:50
有意義。謝謝。 –
約definining一個'尺寸()''中的方法ParentInterface'什麼? – fge
@fge:我的枚舉有靜態方法,但接口不能有一個靜態的'size()'方法。 –
但是,您不是在類上調用方法,而是在傳遞給方法的實例上。你不需要使size()方法成爲靜態的。 – Pshemo