http://www.concretepage.com/java/jdk-8/java-8-unaryoperator-binaryoperator-exampleの例を使って遊んでいました。Java 8ストリームの静的コンテキストから非静的メソッドを参照することはできません
非静的メソッドは、から参照することはできません。
私が本当に混乱見つけることコレクターを形成するとき、私は誤ってジェネリックの一つに間違ったタイプを入れたときに、Javaコンパイラは私に非常に誤解を招くようなメッセージを与えることです
Map<String, Map<Integer, Integer>> mapOfStudents = list.stream().collect(Collectors.groupingBy(Student::getClassName, Collectors.toMap(Student::getName, Student::getAge)));
マイメートル:静的コンテキスト
私のエラーは、実際にインスタンスコンテキスト対静的とは何の関係もありませんistakeは汎用戻り型です。私はそれを修正して置く:
Map<String, Map<String, Integer>> mapOfStudents
すべてが正常に戻ります。
誰かがこのような混乱しやすいエラーメッセージの原因を説明することはできますか?私はそれが良いものだと確信していますが、私はそれを理解することができません。
EDIT:
~$ java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
私は 'javac'(はるかに明確になりました)と非常に異なるメッセージを受け取ります。メソッド参照/ lambdasを使用すると、Eclipseでも同様のエラーメッセージが表示されますが、 –
Javaコンパイラの正確なバージョンとバージョンを提供してください。タイプ推論はかなり頻繁に変更されているものの1つです。 – biziclop
詳細については、編集セクションを参照してください。私はIntellij Ideaを実行しています。2016.3 – yuranos87