软件工程实践者

统计

留言簿

友情链结

阅读排行榜

评论排行榜

2016年9月3日 #

Java 8 Repeatable注解的使用

Java 8之前,同一注解不能在相同的目标元素上多次使用,例如,如下的注解在Java 8之前是不允许的:
public class SampleClass {
    
    @Quality("Security")
    @Quality("Performance")
    @Quality("Readability")
    public void foo(){
        //
    }
}

Java 8引入了Repeatable注解(@Repeatable)可以解决这一问题,但光有可重复的注解定义还不够,还需要它的容器注解,两者一起来实现可重复注解的使用。实例如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
@Repeatable (Qualities.class)
public @interface Quality {
    String value();
}
@Target(ElementType.METHOD)
public @interface Qualities {
    Quality[] value();
}

其中,Quality是可重复注解,由@Repeatable注解标明,它的容器注解是Qualities,用于存放所有可重复的Quality(存贮在Quality[]中);同时还要注意可重复注解和它的容器注解的目标元素必须是一样的(这也不言自明)。如此这般,我们最开始的 SampleClass 在Java 8环境下就可以安全使用了。


posted @ 2016-09-06 16:24 软件工程实践者 阅读(819) | 评论 (0)编辑 收藏

Bill Push的单例模式实现

以下单例实现思想来自《Java Design Patterns: A Programmer's Approach》.
该方法利用了Java缺省的Lazy类实例化机制克服了传统单例模式实现中Lazy实例化方式的不足。

public class Singleton {
   private Singleton(){}
   
   public static Singleton getInstance(){
      return Helper.instance;
   }

   static class Helper {
       private static Singleton instance = new Singleton();
   }
}

posted @ 2016-09-03 09:37 软件工程实践者 阅读(220) | 评论 (0)编辑 收藏