转换清单 到清单 (或任何扩展Number的类)

转换清单 到清单 (或任何扩展Number的类),第1张

转换清单 到清单 (或任何扩展Number的类)

我认为这段代码最重要的方面是

Function
方法本身。我也认为切换
Function
主体中允许的子类没有任何意义,因为您已经知道
Number
要在
Function
创建子类时返回哪种类型的子类。如果给出的话,您的方法也会失败,这也是一个小问题
BigInteger.class

鉴于此,我要做的是创建一个实用工具类(我们称之为它

Numbers
),并在其上提供方法,使每个方法返回一个
Function
(可以是
enum
单例)将a解析
String
为特定类型的方法
Number
。那是:

public class Numbers {  public static Function<String, Integer> parseIntegerFunction() { ... }  public static Function<String, Long> parseLongFunction() { ... }  ...}

它们每个都可以这样实现:

public static Function<String, Integer> parseIntegerFunction() {  return ParseIntegerFunction.INSTANCE;}private enum ParseIntegerFunction implements Function<String, Integer> {  INSTANCE;  public Integer apply(String input) {    return Integer.valueOf(input);  }  @Override public String toString() {    return "ParseIntegerFunction";  }}

然后可以使用此功能,但用户需要:

List<String> strings = ...List<Integer> integers = Lists.transform(strings, Numbers.parseIntegerFunction());

与您的方法相比,此方法有很多优点:

  • 不需要任何切换
    Function
    。。。我们知道我们要创建哪种类型的号码,只需执行此 *** 作即可。快点。
  • 更加灵活,因为每个都
    Function
    可以在任何地方使用…用户不必像您的方法那样使用它(将转换后的值复制到中
    ImmutableList
  • 您仅创建
    Function
    您实际要允许的。如果没有
    BigInteger
    解析功能,则用户只能调用它,而不是像在您的示例中那样在编译时完全合法然后在运行时失败是完全合法的。

附带说明一下,我建议将返回

ImmutableList
be
ImmutableList
而不是
List

的任何方法的返回类型设为…,它提供对该方法的客户有用的信息。

编辑:

如果您 确实需要 更多动态的东西(即,您希望具有某些实例的类

Class<T extendsNumber>
能够将
String
s转换为该
Number
类型),则还可以添加如下查找方法:

public static <T extends Number> Function<String, T> parseFunctionFor(Class<T> type) {  // lookup the function for the type in an ImmutableMap and return it}

但是,如果有一个

Number
子类没有提供,则它与原始方法有同样的问题
Function
。似乎在很多情况下这都没有用。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5506466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存