java 扩展名_Java扩展方法

java 扩展名

java 扩展名

还可以使用扩展方法吗?

显然,有一个名为XTend的Java方言可以做到这一点,但是Java中没有明显的扩展方法。

我从C#回忆起,扩展方法允许您定义如下内容:

 int myExtensionMethod(SomeClass theExtendee, Object input) {

   return ...;
 }
 SomeClass myExtendable = new SomeClass();
 // I'm calling this as though it's a member of the class
 myExtendable.myExtensionMethod(someInput);
 // as opposed to calling it as a wrapper
 myExtensionMethod(myExtendable, someInput);

您可以在Java中执行第二步,为什么不呢?

流中的可重用性

在Java流中,我们使用了一种流利的语法。 让我们考虑以下示例:

 Stream<String> someValues = someSource().stream()

    .map(Source::getParticularField)

    .map(Field::getParticularChild)

    .map(Object::toString)

    .filter(not(String::isBlank))

    .map(String::toUpperCase);

上面的算法分为三个阶段:

  • 选择数据源
  • 深入到particularChild对象
  • 转换为大写的非空白字符串

其中的后两个可能会变成可重用的组件:

 public static Stream<Child> drillDown(Stream<Source> source) {

    return source.map(Source::getParticularField)

        .map(Field::getParticularChild);
 }
 public static <T> Stream<String> nonBlankUppercase(Stream<T> source) {

    return source.map(Object::toString)

        .filter(not(String::isBlank))

        .map(String::toUpperCase);
 }

问题在于,使用它们看起来将涉及一些嵌套:

 Stream<String> someValues = nonBlankUppercase(

    drillDown(someSource().stream()));

与原著的流畅/前卫性质相比,这不仅有点难读,而且倒退了。

我们可以通过流解决这个问题!

但是,今天我想到可以通过Java中的流解决此问题。 绝对值得考虑使用流和Optional的类似于流的接口的其他方式可以使我们流畅地进行转换:

 Stream<String> someValues = someSource().stream()

    .flatMap(item -> drillDown(Stream.of(item)))

    .flatMap(item -> nonBlankUppercase(Stream.of(item)));

这几乎是有用的类别...

扩展会更好,但是…

翻译自: https://www.javacodegeeks.com/java-extension-methods.html

java 扩展名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值