是否有可能复制在枚举中提供抽象方法的功能,内部枚举常量必须覆盖并提供功能?
public enum Logic {
PAY_DAY {
@Override
public void acceptPlayer(Player player) {
// Perform logic
}
},
COLLECT_CASH {
@Override
public void acceptPlayer(Player player) {
// Perform logic
}
}
,
ETC_ETC {
@Override
public void acceptPlayer(Player player) {
// Perform logic
}
};
public abstract void acceptPlayer(Player player);
}
Run Code Online (Sandbox Code Playgroud)
如果它不能:: 你能提供一种方法,我可以用类似的方式实现许多特定的逻辑吗?
编辑::我知道C#中的枚举并不像Java那样真正的"对象",但我希望执行类似的逻辑.
编辑::为了澄清,我不想为每个特定的逻辑位提供具体的类.IE,创建一个接口acceptPlayer并创建许多新类是不合适的
这是一个选项 - 不使用枚举,但类似的东西 - 是...
public abstract class Logic
{
public static readonly Logic PayDay = new PayDayImpl();
public static readonly Logic CollectCash = new CollectCashImpl();
public static readonly Logic EtcEtc = new EtcEtcImpl();
// Prevent other classes from subclassing
private Logic() {}
public abstract void AcceptPlayer(Player player);
private class PayDayImpl : Logic
{
public override void AcceptPlayer(Player player)
{
// Perform logic
}
}
private class CollectCashImpl : Logic
{
public override void AcceptPlayer(Player player)
{
// Perform logic
}
}
private class EtcEtcImpl : Logic
{
public override void AcceptPlayer(Player player)
{
// Perform logic
}
}
}
Run Code Online (Sandbox Code Playgroud)
你说你不想为每一个逻辑提供一个具体的类 - 但这基本上就是你用Java做的事情,只是这个类会稍微隐藏你.
以下是使用委托处理不同行为的替代方法:
public sealed class Logic
{
public static readonly Logic PayDay = new Logic(PayDayAccept);
public static readonly Logic CollectCash = new Logic(CollectCashAccept);
public static readonly Logic EtcEtc = new Logic(player => {
// An alternative using lambdas...
});
private readonly Action<Player> accept;
private Logic(Action<Player> accept)
{
this.accept = accept;
}
public void AcceptPlayer(Player player)
{
accept(player);
}
private static void PayDayAccept(Player player)
{
// Logic here
}
private static void CollectCashAccept(Player player)
{
// Logic here
}
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您仍然可以获得一组固定的值 - 但您将无法打开它们.你可能有一个单独的"真实"枚举,但这会有点混乱.
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |