私はOCP Java SE7, certification guide from Mala Guptaを読んでいます。 297ページで、次のコードスニペット型推論アルゴリズムのどのような変更によりこの現象が発生しますか?
import java.util.HashMap;
import java.util.Map;
public class TestGenericTypeInference {
Map<String,Double> salaryMap = new HashMap<>();
Map<String,Object> copySalaryMap = new HashMap<>(salaryMap);
}
は、Java 8でコンパイルされたが、Java 7とコンパイラが文句を言う:
TestGenericTypeInference.java:8: error: incompatible types: HashMap<String,Double> cannot be converted to Map<String,Object>
Map<String,Object> copySalaryMap = new HashMap<>(salaryMap);
^
私の質問は次のとおりです。型推論アルゴリズムでどのような変更は、この動作の原因は?
本当に '新しいHashMap <>(salaryMap);'はネストされたジェネリックメソッド呼び出しと見なすことができますか? –
'new ArrayList <>(Collections。)と同じことです。上記を参照してください。 – Andremoniy
はい、しかし、 'salaryMap'は、' Collections.emptyList'のような推論を必要とするメソッド呼び出しではなく、オブジェクト参照です。 –