2016-02-01 128 views
2

方法我有兩個不同的枚舉:通行證枚舉類作爲參數傳遞給Java中

public enum A { 
    mass(10); // many other values omitted for clarity 

    private final int m; 

    private A(int m) { this.m = m; } 

    public int value() { return this.m; } 

} 

public enum B { 
    mass(100); // many other values omitted for clarity 

    private final int m; 

    private B(int m) { this.m = m; } 

    public int value() { return this.m; } 
} 

,並想通過枚舉類作爲參數傳遞給我的功能。從我發現SO,建議我可以通過類,但我不知道如何正確檢測和使用A或B枚舉函數體中其他答案:

public int mass(Class<?> clazz) { 
    // Is it the best way? How to avoid a bunch of ifs? 
    if (clazz == A.class) return A.mass.value(); 
    if (clazz == B.class) return B.mass.value(); 
} 
+1

這看起來真的很醜,就好像你不需要這樣做,但它應該工作得很好。 – bmargulies

+5

爲什麼不只是讓'A'和'B'實現一個getMass()方法的接口呢? – resueman

回答

3

不知道你」試圖完成好友,但你似乎需要多態。嘗試使用的接口,像這樣枚舉:

public enum A implements MassProvider { 
    MASS(10); 
    private int mass; 

    A(int mass) { 
     this.mass = mass; 
    } 

    @Override 
    public int getMass() { 
     return mass; 
    } 
} 

public enum B implements MassProvider { 
    MASS(100); 
    private int mass; 

    B(int mass) { 
     this.mass = mass; 
    } 

    @Override 
    public int getMass() { 
     return mass; 
    } 
} 

public interface MassProvider { 
    int getMass(); 
} 

public static int mass(MassProvider p) { 
    return p.getMass(); 
} 

基本上強似一類傳遞由兩個枚舉實施MassProvider大衆方法。

+0

似乎多態是一種方式,但我仍然不清楚如何將A或B的實例傳遞給mass(MassProvider p)函數? –

+0

只需將A或B實例傳遞給質量方法即可。由於A和B實施MassProvider,它將會正常工作。 – Ulises

相關問題