gpt4 book ai didi

java - 这个 Java 枚举的使用/设计是否正确?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:14 32 4
gpt4 key购买 nike

我的任务是将一些 Java 代码转换为 C# 并遇到以下枚举(我不得不概括它,因为代码是专有的,抱歉)。代码的一般目的是从“非基本单位”转换为“基本单位”(比如从公里转换为毫米,或其他任何东西。他们有大量的转换)。我唯一改变的是变量名。代码中的模式正是这样......

public enum ThisIsAnEnum implements someInterface
{
typeKilom( MetricType.kilometer ),

typeMillm( MetricType.millimeter );

public double convertSomething(double dbl1, double dbl2)
{
// do stuff
return a double
}
}

然后在代码中调用如下:

public static void main( String[] args )
{
ThisIsAnEnum.typeKilom.convertSomething(aDouble, bDouble);
}

我有几个问题:

  • 在 Java 中使用枚举是一种好的做法吗?
  • 如果是或否,我应该在 C# 中采用什么方法?你能做类似的事情吗?即使可以,我也不确定这种方法是否正确。

我不是要别人帮我转换它...只是这是否是一个好方法,以及(如果是的话)我是否应该尝试在 C# 中做同样的事情。如果不是,那么应该采取什么方法?

最佳答案

Is this use of enumerations a good practice in Java?

当然。这正是在 Java 中引入枚举时所设想的那种用法。

what approach should I take in C#?

由于 C# enum s 没有相同的功能,您需要以其他方式对其进行建模。一种方法是使用 Java 中的方法定义类或接口(interface) enum ,并制作一堆 public readonly模仿 enum 的实例条目:

public ISomeInterface {
Func<double,double,double> ConvertSomething {get;}
}

public class ThisIsAnEnum : ISomeInterface {

public Func<double,double,double> ConvertSomething {get;private set;}

public MetricType MetricType {get;private set;}

// Private constructor prevents outside instantiations
private ThisIsAnEnum(MetricType mt) {
MetricType = mt;
}

public static readonly ThisIsAnEnum TypeKilom = new ThisIsAnEnum(MetricType.Kilometer) {
ConvertSomething = (dbl1, dbl2) => {
...
return res;
}
}

public static readonly ThisIsAnEnum TypeMillim = new ThisIsAnEnum(MetricType.Millimeter) {
ConvertSomething = (dbl1, dbl2) => {
...
return res;
}
}

}

使用 Func<double,double,double>允许您使用具有多个不同逻辑部分的单个类,同时保留基于实例的分派(dispatch)。

采用这种方法的一个不幸后果是您将无法 switch在这些 enum

关于java - 这个 Java 枚举的使用/设计是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30736002/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com