我有很多if语句,我想避免它们。

我尝试使用HashMap,但不适用于数据类型。请查看下面的代码。这只是第一个if语句,但是我还有更多...
字段是一个数据类型

   if (field.equals(DataTypes.IntegerType)) {
     x = Integer.valueOf();
    }

    [...]
else if (field instanceof org.apache.spark.sql.types.TimestampType) {
  try {
    x = Timestamp.valueOf();
  } catch (Exception) {
    try {
      columns[i] = Timestamp.valueOf(...).toLocalDateTime());
    } catch (Exception) {

      throw new ParseException("...");
    }
  }
   [...]


    else {
    x = null
   }


我可以以某种方式避免使用其他许多if语句吗?

最佳答案

您可以保留转化的静态地图:

private static final Map<DataType, Function<String, ?>> stringConverters;

static {
    Map<DataType, Function<String, ?>> map = new EnumMap<>(DataType.class);

    map.put(DataType.IntegerType,   Integer::valueOf);
    map.put(DataType.LongType,      Long::valueOf);
    map.put(DataType.DoubleType,    Double::valueOf);
    map.put(DataType.FloatType,     Float::valueOf);
    map.put(DataType.StringType,    Function.identity());
    map.put(DataType.BinaryType,    Binary::fromString);

    if (!map.keySet().containsAll(EnumSet.allOf(DataType.class))) {
        throw new RuntimeException(
            "Programming error: Not all DataType values accounted for.");
    }

    stringConverters = Collections.unmodifiableMap(map);
}

// ...

    columns[i] = stringConverters.get(field).apply(s);


containsAll检查对于确保您不会忽略任何DataType值很有用。

关于java - 避免许多if语句-不同的数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57907104/

10-13 22:06