Java 8新特性前瞻

发表于:2014-6-03 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:LittlePanpc    来源:51Testing软件测试网采编

分享:
  3,下面了解一下java中的默认和静态方法。
  学习语言最有效的方法之一就是学习优秀的代码实例,下面的就是优秀实例的其中之一:
1 public interface DefaulableFactory {
2      // Interfaces now allow static methods
3      static Defaulable create( Supplier< Defaulable > supplier ) {
4           return supplier.get();
5      }
6
7       private interface Defaulable {
8           // Interfaces now allow default methods, the implementer    may or
9          // may not implement (override) them.
10          default String notRequired() {
11              return "Default implementation";
12          }
13      }
14
15      private static class DefaultableImpl implements Defaulable {
16      }
17
18      private static class OverridableImpl implements Defaulable {
19          @Override
20          public String notRequired() {
21              return "Overridden implementation";
22          }
23      }
24
25      public static void main( String[] args ) {
26          Defaulable defaulable = DefaulableFactory.create(  DefaultableImpl::new );
27          System.out.println( defaulable.notRequired() );
28
29          defaulable = DefaulableFactory.create( OverridableImpl::new );
30          System.out.println( defaulable.notRequired() );
31      }
32
33  }
  默认方法在函数定义的返回类型前面添加关键字default,同时添加了实现了功能的函数体。接口中的default方法使得实现了该接口的类可以不必实现该方法,当然也可以对其进行重写。
  添加了默认方法的接口具有了java 5中抽象类所能够提供的功能,使得所有使用抽象类的地方都可以用拥有了default方法的接口取代,因此,不免让人遐想:抽象类在此之后还有存在的意义吗?!
  同时,也要注意一下静态方法的参数及其使用。尤其是Supplier<Defaultable> supplier和DefaultableImp::new,这两种表达方式对java开发人员而言,还是挺新颖的。
  4,可重复注解。
  在java 8以前,相同类型的注解只能声明一次,例如在java开发的过程中,对某个方法重写,只能声明一次@override;在android构台过程中,对某个方法声明目标api,只有声明一次@targetapi。但是在java 8中,相同类型的注解却可以声明多次,示例代码如下:
1 public class RepeatingAnnotations {
2     @Target( ElementType.TYPE )
3     @Retention( RetentionPolicy.RUNTIME )
4     public @interface Filters {
5         Filter[] value();
6     }
7
8     @Target( ElementType.TYPE )
9     @Retention( RetentionPolicy.RUNTIME )
10     @Repeatable( Filters.class )
11     public @interface Filter {
12         String value();
13     };
14
15     @Filter( "filter1" )
16     @Filter( "filter2" )
17     public interface Filterable {
18     }
19
20     public static void main(String[] args) {
21         for( Filter filter: Filterable.class.getAnnotationsByType( Filter.class ) ) {
22             System.out.println( filter.value() );
23         }
24     }
25 }
  在main方法中,Fileterable接口通过反射机制来获取自身定义的注解,然后打印出来。
42/4<1234>
2023测试行业从业人员调查问卷已开启,千元大奖正在等你~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号