1. 程式人生 > >Idea報錯source 1.6 中不支援 diamond 運算子 (請使用 -source 7 或更高版本以啟用 diamond 運算子)

Idea報錯source 1.6 中不支援 diamond 運算子 (請使用 -source 7 或更高版本以啟用 diamond 運算子)

Error:(71, 35) 錯誤: -source 1.6 中不支援 diamond 運算子(請使用 -source 7 或更高版本以啟用 diamond 運算子)

這個錯誤對應程式裡的程式碼是:


一般正確的寫法是在宣告的時候指定型別,也就是:

List<PublicBlogListBean>  _hotDatas = new ArrayList<PublicBlogListBean>();

但是在JDK 1.7裡新增了一個新特性:

增強對通用例項建立(diamond)的型別推斷 :
             型別推斷是一個特殊的煩惱,下面的程式碼: 
             Map<String, List<String>> anagrams = new HashMap<String, List<String>>(); 



             通過型別推斷後變成: 
             Map<String, List<String>> anagrams = new HashMap<>(); 
             這個<>被叫做diamond(鑽石)運算子,這個運算子從引用的宣告中推斷型別。 

也就是說JDK1.7支援這種型別推斷後,在宣告_hotDatas 時new ArrayList<>裡可以不需要加上PublicBlogListBean型別

截圖中的錯誤也提示了:-soure1.6中不支援diamond運算子,Diamond types are not supported at this language level。說明目前使用的JDK版本不支援,

但是Project此時的JDK路徑正是1.7的版本,這...

一、按下圖箭頭步驟操作


按以上步驟操作應用後就能解決問題,如果不能就把Project Structure中所有有關版本的都調整為1.7及以上。

還有調整java compiler的版本



二、事實上專案裡還沒有對module做原始碼相容性的配置,即設定 Source Compatibility和Target Compatibility為1.7:


點選ok會後gradle重新構建,確定reload Project下就好啦~


三、也可以在build.gradle裡直接配置:


四、也可以在Maven的pom.xml裡配置:這樣任何人從svn或git下下來的程式碼都無需操作一或二步驟

<project xmlns="...">
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...
</project>