栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

转换清单 到清单 (或任何扩展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
。似乎在很多情况下这都没有用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号