-
交互式爱情
双支撑初始化几个月前我第一次发现它的时候让我大吃一惊,以前从未听说过。线迹通常不像存储每个线程状态的方式那样广为人知。由于JDK1.5 Java有非常好的实现和健壮的并发工具,而不仅仅是锁,所以它们存在于java.util.并发一个特别有趣的例子是java.util.concurrent.原子子包,该包含实现比较和交换操作,并可以映射到这些操作的实际本机硬件支持的版本。
-
温温酱
类型参数方差联合:public class Baz<T extends Foo & Bar> {}例如,如果您想接受一个既具有可比性又具有集合的参数:public static <A, B extends Collection<A> & Comparable<B>>boolean foo(B b1, B b2, A a) {
return (b1.compareTo(b2) == 0) || b1.contains(a) || b2.contains(a);}如果两个给定集合相等,或者其中一个包含给定元素,则此人工方法返回true,否则为false。需要注意的一点是,您可以对参数b1和b2调用可比较方法和Collection方法。
-
精慕HU
前几天我对实例初始化器感到惊讶。我删除了一些代码折叠的方法,最后创建了多个实例初始化器:public class App {
public App(String name) { System.out.println(name + "'s constructor called"); }
static { System.out.println("static initializer called"); }
{ System.out.println("instance initializer called"); }
static { System.out.println("static initializer2 called"); }
{ System.out.println("instance initializer2 called"); }
public static void main( String[] args ) {
new App("one");
new App("two");
}}执行main方法将显示:static initializer calledstatic initializer2 called
instance initializer called
instance initializer2 called
one's constructor called
instance initializer called
instance initializer2 called
two's constructor called我想,如果您有多个构造函数,并且需要通用代码,这将是有用的。它们还为初始化类提供了语法糖:List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};Map<String,String> codes = new HashMap<String,String>(){{
put("1","one");
put("2","two");}};