En Java, nous pouvons créer IntFunction<String[]>
de référence constructeur de tableau 1D:références de méthode pour les tableaux multidimensionnels en Java 8
// both do the same thing
IntFunction<String[]> createArrayL = size -> new String[size];
IntFunction<String[]> createArrayMR = String[]::new;
Maintenant, je me demande pourquoi nous ne pouvons le faire avec un tableau 2D:
BiFunction<Integer, Integer, String[][]> createArray2DL =
(rows, cols) -> new String[rows][cols];
// error:
BiFunction<Integer, Integer, String[][]> createArray2DMR =
String[][]::new;
Bien sûr, nous pouvons écrire:
IntFunction<String[][]> createArray2DInvalidL = String[][]::new;
System.out.println(createArray2DInvalidL.apply(3)[0]); // prints null
mais cela se comportera différemment de:
new String[3][3]
car les tableaux de lignes ne seront pas initialisés. Donc, ma question est: pourquoi String[][]::new
ne fonctionne pas pour les tableaux 2D (pour moi, cela ressemble à une incohérence dans la conception du langage)?
et pourquoi 'BiFunction createArray2DL = (a, b) -> Chaîne [] [] :: new;' produire une erreur ?? –
user43968
@ user43968 parce que dans votre expression lambda vous retournez une autre fonction '' 'BiFunction> createArray2DL = (a, b) -> Chaîne [] [] :: new;' '' –