błędu kompilacji interesująca Lambda Java 8 (Oracle JDK)Java 8 Lambda z funkcją <String, Object> jako argument
java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Mam wywołanie metody:
new CSVFile()
.of(new FileInputStream("MyFile.csv"))
.withColumnMapping("name", "fullName", s -> s.toUpperCase())
.withColumnMapping("gender", "gender", s -> s.toUpperCase());
Jest to metoda Próbuję zadzwonić:
public CSVFile withColumnMapping(final String columnName, final String beanPropertyName, final Function<String, Object> columnTransformFunction) {
columnMappings.add(new ColumnMapping(columnName, beanPropertyName, Optional.of(columnTransformFunction)));
return this;
}
Kompilacja błąd pojawia się:
[ERROR] /Users/sai/fun/reactivecsv/src/test/java/reactivecsv/CSVFileTest.java:[26,50] cannot find symbol
[ERROR] symbol: method toUpperCase()
[ERROR] location: variable s of type java.lang.Object
Niesamowicie, to kompiluje
Function<String, Object> upperCaseConversion = String::toUpperCase;
new CSVFile()
.of(new FileInputStream("MyFile.csv"))
.withColumnMapping("name", "fullName", upperCaseConversion)
.withColumnMapping("gender", "gender", upperCaseConversion);
Dlaczego kompilator nie jest w stanie syntetyzować lambda do funkcji?
Jaką zmianę deklaruje się klasa 'CSVFile'? Czy to generyczne? –
To jest poprawne: 'public class CSVFile' –
user1189332
Z tego powodu 'nowy plik CSVFile()' jest typem nieprzetworzonym. –