2016-02-01 92 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

相关问题