新的JEP草案将简化Java中的撰写

偏爱继承而不是继承

有充分的理由,“在继承中偏爱组成”这一口头禅在文献中已多次重复。 但是,Java很少或根本没有语言支持来简化对象的组成。 但是,有了名为“简洁方法机构”的新的JEP草案,情况可能会略有改善。

Brian Goetz负责JEP草案,该草案很可能将在项目“ Amber”下处理。 完整的草稿可以在这里找到。

简洁的方法体

JEP在实施时允许使用一种称为“简明方法体(CMB)”的方法,从广义上讲,方法主体可以是lambda或方法引用。 这是一个例子:

老式:

int length(String s) {
  return s.length();
}

新的CMB:

int length(String s) -> s.length();     //  -> is "single expression form"

或者简单地:

int length(String s) = String::length;  //  = is "method reference form"

这将减少样板代码,同时提高代码的可读性。

组成

考虑现有的Java类
Collections.UnmodifiableList委托一个内部
List类并防止对其进行修改(缩短代码并重新排序以提高可读性):

static class UnmodifiableList<E> extends UnmodifiableCollection<E>
                                  implements List<E> {

        final List<? extends E> list;

        UnmodifiableList(List<? extends E> list) {
            super(list);
            this.list = list;
        }

        public boolean equals(Object o) {return o == this || list.equals(o);}
        public int hashCode()           {return list.hashCode();}

        public E get(int index) {return list.get(index);}
        public int indexOf(Object o)            {return list.indexOf(o);}
        public int lastIndexOf(Object o)        {return list.lastIndexOf(o);}
        public E set(int index, E element) {
            throw new UnsupportedOperationException();
        }

使用CMB,可以这样实现:

static class UnmodifiableList<E> extends UnmodifiableCollection<E>
                                  implements List<E> {

        final List<? extends E> list;

        UnmodifiableList(List<? extends E> list) {
            super(list);
            this.list = list;
        }

        public boolean equals(Object o) = list::equals;
        public int hashCode()           = list::hashCode;
        public E get(int index)         = list::get;
        public int indexOf(Object o)    = list::indexOf;
        public int lastIndexOf(Object o)= list::lastIndexOf;
        public E set(int index, E element) {
            throw new UnsupportedOperationException();
        }

我认为此功能很有意义。 当委派具有一个或多个参数的方法时,此功能特别有用。

翻译自: https://www.javacodegeeks.com/2018/09/composition-in-java-jep-draft.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值