Le tutoriel explique l'interface fonctionnelle intégrée Consumer
Par exemple est une interface fonctionnelle car elle ne définit qu'une seule méthode, par contre n'en est pas une. Quelques trucs à savoir sur les lambdas Mettons qu'on ait l'interface suivante: public interface MathOperation { public double compute(double a, double b);} Une implémentation de cette opération pourrait être l'addition. Sous forme de lambda elle serait écrite de la sorte: Par contre si on voulait que notre méthode soit un peu plus complexe, la syntaxe de la lambda s'alourdirait notamment avec l'usage du mot-clef return qui est facultatif dans le cas où la lambda ne contient qu'une seule opération. Par exemple on pourrait avoir: (a, b) -> { double res = a + b; (res); return res;} Les références de méthodes Les références de méthodes sont aussi un truc sympa de Java 8 introduit par les lambdas. Mettons qu'on ait un tableau de String dont la déclaration est comme suit: String[] myArray = {"one", "two", "three", "four"}; Il est parfaitement possible de le trier avec la notation suivante: (myArray, String::compareToIgnoreCase); Il est possible de passer des références de méthodes statiques, ou des références de méthodes d'instance.
Avec l'avancée du progrès, on peut écrire plus léger avec une lambda, pardon, expression fonctionnelle
Consumer
Cela découle probablement d'une mauvaise compréhension de l'interface {} en cours. J'ai le code suivant type Configuration struct { Username string} func loadJson(jsonStr []byte, x *Configuration}) { json. Unmarshal(jsonStr, x)} func main() { //var config *Configuration config:= new(Configuration) file, e:= adFile("") loadJson(file, config) ("%s\n", ername)} Il charge une configuration json dans la variable de configuration. Je veux rendre la fonction loadJson plus abstraite et accepter n'importe quelle structure. Je pensais que la meilleure façon de le faire serait d'accepter un *interface{}, mais j'obtiens l'erreur suivante lors du changement de la signature loadJson.. / cannot use config (type *Configuration) as type *interface {} in argument to loadJson: *interface {} is pointer to interface, not interface Au lieu de cela, load json devrait être ceci func loadJson(jsonStr []byte, x interface{}}) { L'interface {} est-elle déjà un pointeur? Le message d'erreur n'a pas non plus de sens pour moi, la configuration n'est-elle pas un pointeur vers une interface?
Sitemap | wwropasx.ru, 2024