2016年8月30日
#
Java 8之前,同一注解不能在相同的目標(biāo)元素上多次使用,例如,如下的注解在Java 8之前是不允許的:
public class SampleClass {
@Quality("Security")
@Quality("Performance")
@Quality("Readability")
public void foo(){
//
}
}
Java 8引入了Repeatable注解(@Repeatable)可以解決這一問題,但光有可重復(fù)的注解定義還不夠,還需要它的容器注解,兩者一起來實(shí)現(xiàn)可重復(fù)注解的使用。實(shí)例如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
@Repeatable (Qualities.class)
public @interface Quality {
String value();
}
@Target(ElementType.METHOD)
public @interface Qualities {
Quality[] value();
}
其中,Quality是可重復(fù)注解,由@Repeatable注解標(biāo)明,它的容器注解是Qualities,用于存放所有可重復(fù)的Quality(存貯在Quality[]中);同時(shí)還要注意可重復(fù)注解和它的容器注解的目標(biāo)元素必須是一樣的(這也不言自明)。如此這般,我們最開始的
SampleClass 在Java 8環(huán)境下就可以安全使用了。
以下單例實(shí)現(xiàn)思想來自《Java Design Patterns: A Programmer's Approach》.
該方法利用了Java缺省的Lazy類實(shí)例化機(jī)制克服了傳統(tǒng)單例模式實(shí)現(xiàn)中Lazy實(shí)例化方式的不足。
public class Singleton {
private Singleton(){}
public static Singleton getInstance(){
return Helper.instance;
}
static class Helper {
private static Singleton instance = new Singleton();
}
}
以下轉(zhuǎn)自StackOverflow(
http://stackoverflow.com/questions/5074063/maven-error-failure-to-transfer),親測(cè)可用。
This worked for me in Windows as well.
- Locate the {user}/.m2/repository (Using Juno /Win7 here)
- In the Search field in upper right of window, type ".lastupdated". Windows will look through all subfolders for these files in the directory. (I did not look through cache.)
- Remove them by Right-click > Delete (I kept all of the lastupdated.properties).
- Then go back into Eclipse, Right-click on the project and select Maven > Update Project. I selected to "Force Update of Snapshots/Releases". Click Ok and the dependencies finally resolved correctly.
當(dāng)我們寫Groovy腳本代碼的時(shí)候,有時(shí)會(huì)發(fā)生編譯錯(cuò)誤,如下:
- Groovy:Invalid duplicate class definition of class XXX : The source XXXX\XXX.groovy contains at least two
definitions of the class XXX.
- The type XXX is already defined
原因在于Groovy會(huì)把.groovy代碼文件作為腳本或類定義來處理,例如如下代碼:
class Order {
def security
def value
private buy_sell(su, closure) {
security = su[0]
quantity = su[1]
closure()
}
def getTo() {
this
}
}
def methodMissing(String name, args) {
order.metaClass.getMetaProperty(name).setProperty(order, args)
}
def getNewOrder() {
order = new Order()
}
Integer.metaClass.getShares = { -> delegate }
Groovy會(huì)把上述代碼作為腳本處理,同時(shí)缺省用文件名來作為一個(gè)外圍類類包括整個(gè)腳本程序,此時(shí),如果該文件名恰好也是Order的話,那么就會(huì)出現(xiàn)重復(fù)的類定義錯(cuò)誤提示。
解決辦法是將腳本文件名取另外一個(gè)不同的名字。
已經(jīng)申請(qǐng)OCUP中級(jí)考試的學(xué)員可以在一年內(nèi)(截止到17年9月份)免費(fèi)申請(qǐng)OCUP2中級(jí)考試的資格(原有考試仍可以參加)。此外,2014年3月份之后參加了原有OCUP中級(jí)認(rèn)證考試的學(xué)員可以免費(fèi)申請(qǐng)OCUP2中級(jí)認(rèn)證考試。詳見OMG網(wǎng)站聲明(http://www.omg.org/ocup-2/exam-info.htm)。