Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 24226|Απάντηση: 1

[Πηγή] Λεπτομερής επεξήγηση των κοινών λειτουργικών διεπαφών (αντιπροσώπων) στη Java

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 16/9/2021 9:28:21 π.μ. | | | |
Το JDK 1.8 API περιλαμβάνει πολλές ενσωματωμένες λειτουργικές διεπαφές, όπως οι διεπαφές Comparator ή Runnable που χρησιμοποιούνται συνήθως στην παλιά Java, οι οποίες προσθέτουν @FunctionalInterface σχολιασμούς ώστε να μπορούν να χρησιμοποιηθούν σε λάμδα. Τώρα, ας το καταλάβουμε πραγματικά από την είσοδο των κοινών συναρτήσεων στο Function.

Όνομαδακτυλογραφώπεριγραφή
ΚαταναλωτήςΚαταναλωτής< T >Λαμβάνει αντικείμενα T, δεν επιστρέφει τιμές
ΚατηγόρημαΚατηγόρημα< Τ >Λαμβάνει το αντικείμενο T και επιστρέφει τη δυαδική τιμή
ΛειτουργίαΛειτουργία< T, R >Λαμβάνει το αντικείμενο T και επιστρέφει το αντικείμενο R
ΠρομηθευτήςΠρομηθευτής< T >Παρέχετε αντικείμενα Τ (π.χ. φυτά) χωρίς να αποδέχεστε τιμές
ΜοναδιαίοςΧειριστήςΜοναδιαίοςΧειριστήςΛαμβάνει το αντικείμενο T και επιστρέφει το αντικείμενο T
ΔυαδικόςΤελεστήςΔυαδικόςΤελεστήςΛάβετε δύο αντικείμενα T και επιστρέψτε αντικείμενα T


Μια διασύνδεση με την ετικέτα FunctionalInterface ονομάζεται λειτουργική διασύνδεση, η οποία μπορεί να έχει μόνο μία προσαρμοσμένη μέθοδο, αλλά μπορεί να περιλαμβάνει μεθόδους που κληρονομούνται από την κλάση αντικειμένου. Εάν μια διεπαφή έχει μόνο μία μέθοδο, ο μεταγλωττιστής θα σκεφτεί ότι είναι μια λειτουργική διεπαφή. Είτε πρόκειται για λειτουργική διεπαφή είτε όχι, πρέπει να σημειωθούν τα ακόλουθα σημεία:


  • Ο σχολιασμός μπορεί να επισημανθεί μόνο σε διεπαφές με "Υπάρχει μόνο μία αφηρημένη μέθοδος".
  • Οι στατικές και οι προεπιλεγμένες μέθοδοι στη διεπαφή JDK8 δεν είναι αφηρημένες μέθοδοι.
  • Η διεπαφή κληρονομεί το java.lang.Object από προεπιλογή, οπότε αν η διεπαφή δείχνει ότι η δήλωση παρακάμπτει τη μέθοδο στο Αντικείμενο, δεν θεωρείται αφηρημένη μέθοδος.
  • Ο σχολιασμός δεν απαιτείται και εάν μια διεπαφή πληροί τον ορισμό της "λειτουργικής διεπαφής", δεν έχει καμία επίδραση εάν ο σχολιασμός προστεθεί ή όχι. Επιπλέον, ο σχολιασμός επιτρέπει στον μεταγλωττιστή να ελέγχει καλύτερα. Εάν γράψετε μια μη λειτουργική διεπαφή, αλλά προσθέσετε @FunctionInterface, ο μεταγλωττιστής θα αναφέρει ένα σφάλμα.
  • Ο ορισμός δύο προσαρμοσμένων μεθόδων σε μία διεπαφή θα έχει ως αποτέλεσμα έναν μη έγκυρο σχολιασμό "@FunctionalInterface". Το FunctionalInterfaceTest δεν είναι σφάλμα λειτουργικής διεπαφής.


java.util.function Περιέχει έναν αριθμό κλάσεων για την υποστήριξη του λειτουργικού προγραμματισμού της Java και οι λειτουργικές διεπαφές σε αυτό το πακέτο είναι:

αύξων αριθμός
Διεπαφή & Περιγραφή
1BiConsumer<T,U>
Αντιπροσωπεύει μια ενέργεια που δέχεται δύο παραμέτρους εισόδου και δεν επιστρέφει αποτελέσματα
2BiFunction<T,U,R>
Αντιπροσωπεύει μια μέθοδο που δέχεται δύο παραμέτρους εισόδου και επιστρέφει ένα αποτέλεσμα
3ΔυαδικόςΤελεστής<T>
αντιπροσωπεύει μια ενέργεια που δρα σε δύο τελεστές του ίδιου τύπου και επιστρέφει το αποτέλεσμα του ίδιου τύπου τελεστή
4BiPredicate<T,U>
Αντιπροσωπεύει μια μέθοδο δυαδικής τιμής δύο παραμέτρων
5Προμηθευτής Boolean
Αντιπροσωπεύει τον παροχέα του αποτελέσματος δυαδικής τιμής
6Καταναλωτής<T>
Αντιπροσωπεύει μια λειτουργία που δέχεται μια παράμετρο εισόδου και δεν επιστρέφει τίποτα
7ΔιπλόςΔυαδικόςΤελεστής
Το αντιπροσωπεύει μια ενέργεια που δρα σε δύο τελεστές διπλής τιμής και επιστρέφει το αποτέλεσμα μιας διπλής τιμής.
8Διπλός καταναλωτής
Αντιπροσωπεύει μια ενέργεια που δέχεται μια παράμετρο διπλής τιμής και δεν επιστρέφει αποτέλεσμα.
9Διπλή λειτουργία<R>
Αντιπροσωπεύει μια μέθοδο που δέχεται μια παράμετρο διπλής τιμής και επιστρέφει το αποτέλεσμα
10Διπλό κατηγόρημα
Αναπαριστά μια μέθοδο δυαδικής τιμής με παράμετρο διπλής τιμής
11Διπλός προμηθευτής
Αντιπροσωπεύει τον πάροχο μιας δομής διπλής αξίας
12Συνάρτηση DoubleToInt
Δέχεται μια είσοδο διπλού τύπου και επιστρέφει ένα αποτέλεσμα τύπου int.
13Συνάρτηση DoubleToLongFunction
Αποδέχεται μια είσοδο διπλού τύπου και επιστρέφει ένα αποτέλεσμα τύπου μεγάλου μήκους
14ΔιπλόςΕνιαίοςΧειριστής
Αποδεχτείτε μια παράμετρο του ίδιου τύπου διπλό, και ο τύπος της επιστρεφόμενης τιμής είναι επίσης διπλός.
15Λειτουργία<T,R>
Αποδέχεται μια παράμετρο εισόδου, επιστρέφει ένα αποτέλεσμα.
16IntBinaryOperator
Αποδεχτείτε και τις δύο παραμέτρους τύπου int και τύπου επιστρεφόμενης τιμής int.
17Διεθνής Καταναλωτής
Δέχεται μια παράμετρο εισόδου τύπου int χωρίς επιστρεφόμενη τιμή.
18IntFunction<R>
Αποδέχεται μια παράμετρο εισόδου τύπου int και επιστρέφει ένα αποτέλεσμα.
19Κατηγόρημα
: Αποδέχεται μια παράμετρο εισόδου int και επιστρέφει ένα δυαδικό αποτέλεσμα.
20IntΠρομηθευτής
Χωρίς παραμέτρους, επιστρέφει ένα αποτέλεσμα τύπου int.
21Συνάρτηση IntToDouble
Αποδέχεται μια είσοδο τύπου int και επιστρέφει ένα αποτέλεσμα διπλού τύπου.
22Συνάρτηση IntToLong
Αποδέχεται μια είσοδο τύπου int και επιστρέφει ένα αποτέλεσμα μεγάλου τύπου.
23IntUnaryOperator
Αποδεχτείτε μια παράμετρο τύπου int και επιστρέψτε την τιμή ο τύπος είναι επίσης int.
24ΜακρύςΔυαδικόςΤελεστής
Αποδεχτείτε και τις δύο παραμέτρους τύπου long και τύπου τιμής επιστροφής ως long.
25Μακροχρόνιος καταναλωτής
Αποδεχτείτε μια παράμετρο εισόδου τύπου long χωρίς τιμή επιστροφής.
26Μεγάλη λειτουργία<R>
Αποδέχεται μια παράμετρο εισαγωγής τύπου μεγάλου μήκους και επιστρέφει ένα αποτέλεσμα.
27Μακρύ κατηγόρημα
Η R δέχεται μια μεγάλη παράμετρο εισόδου και επιστρέφει ένα αποτέλεσμα δυαδικού τύπου.
28Μακρύς προμηθευτής
Χωρίς παράμετρο, επιστρέφει ένα αποτέλεσμα τύπου long.
29Λειτουργία LongToDouble
Δέχεται μια είσοδο μεγάλου τύπου και επιστρέφει ένα αποτέλεσμα διπλού τύπου.
30Συνάρτηση LongToInt
Αποδέχεται μια είσοδο μεγάλου τύπου και επιστρέφει ένα αποτέλεσμα τύπου int.
31LongUnaryOperator
Αποδεχτείτε μια παράμετρο του ίδιου τύπου με το long και επιστρέψτε την τιμή του τύπου is also long.
32Στόχος Διπλός Καταναλωτής<T>
Αποδεχτείτε έναν τύπο αντικειμένου και μια παράμετρο εισόδου διπλού τύπου χωρίς επιστρεφόμενη τιμή.
33Στόχος IntΚαταναλωτής<T>
Αποδεχτείτε τις παραμέτρους εισόδου του αντικειμένου κειμένου και του τύπου int χωρίς τιμή επιστροφής.
34Στόχος LongΚαταναλωτής<T>
Δέχεται παραμέτρους εισόδου τύπου αντικειμένου και τύπου long χωρίς να επιστρέφει τιμές.
35Κατηγόρημα<T>
Αποδέχεται μια παράμετρο εισόδου και επιστρέφει ένα δυαδικό αποτέλεσμα.
36Προμηθευτής<T>
Χωρίς παραμέτρους, επιστρέφει ένα αποτέλεσμα.
37ToDoubleBiFunction<T,U>
Δέχεται δύο παραμέτρους εισαγωγής και επιστρέφει ένα αποτέλεσμα διπλού τύπου
38ToDoubleFunction<T>
Αποδέχεται μια παράμετρο εισόδου και επιστρέφει ένα αποτέλεσμα διπλού τύπου
39ToIntBiFunction<T,U>
Αποδεχτείτε δύο παραμέτρους εισόδου και επιστρέψτε ένα αποτέλεσμα τύπου int.
40Συνάρτηση <T>ToInt
Αποδεχτείτε μια παράμετρο εισόδου και επιστρέψτε ένα αποτέλεσμα τύπου int.
41ToLongBiFunction<T,U>
Αποδεχτείτε δύο παραμέτρους εισόδου και επιστρέψτε ένα αποτέλεσμα μεγάλου τύπου.
42ToLongΣυνάρτηση<T>
Αποδεχτείτε μια παράμετρο εισόδου και επιστρέψτε ένα αποτέλεσμα μεγάλου τύπου.
43ΜοναδιαίοςΧειριστής<T>
Αποδεχτείτε μια παράμετρο τύπου T και επιστρέψτε την τιμή τύπου T.


ΕγώΗ λειτουργική διεπαφή στην Java είναι ο εκπρόσωπος στο .NET/C#, μεταβιβάζουν τη μέθοδο ως παράμετρο, ως εξής:

Εισαγωγή στους αντιπροσώπους C# (εκπρόσωπος, Δράση, Func, κατηγόρημα)
https://www.itsvse.com/thread-4658-1-1.html

Λειτουργία: Κοινές Μέθοδοι && Πρακτικές

//将Function对象应用到输入的参数上,然后返回计算结果。
R apply(T t);

Αν και η συνάρτηση< T, R > λαμβάνει αντικείμενα T, επιστρέφει αντικείμενα R και μόνο ένα αντικείμενο λήψης και επιστροφής, αλλά σε συνδυασμό με πλειάδες, μπορούν να επιτευχθούν πολλαπλές εισερχόμενες και επιστρεφόμενες τιμές, ανατρέξτε στο:

Η χρήση πλειάδων στην Java
https://www.itsvse.com/thread-10055-1-1.html

Παράδειγμα 1: Περάστε δύο τιμές και αθροίστε τις

Μπορείτε να χρησιμοποιήσετε απλή γραφή και εκφράσεις λάμδα, ο κώδικας έχει ως εξής:





Παράδειγμα 2:

καιΣτη συνέχεια μέθοδος



Μέθοδος σύνθεσης



Πλήρης κωδικός



Επιστροφή αποτελεσμάτων



(Τέλος)




Προηγούμενος:Λύση εξαίρεσης Java FeignClient Interface για πολλά πανομοιότυπα ονόματα υπηρεσιών
Επόμενος:έργο maven \target\classes\META-INF\MANIFEST. MF (σύστημα...
Δημοσιεύτηκε στις 19/9/2021 7:34:22 μ.μ. |
Η Java κοίταξε επίσης, αν και δεν χρησιμοποιείται
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com