Δημιουργήστε ένα ArrayList των μεθόδων και της μεθόδου εκτέλεσης, με την είσοδο στοιχειοσειράς ίδιο όνομα

ψήφοι
-1

Πώς μπορείτε να δημιουργήσετε μια λίστα με όλες τις μεθόδους σε μια τάξη. Στη συνέχεια, αναζητήστε τον κατάλογο αυτό, χρησιμοποιώντας μια είσοδο στοιχειοσειράς για τη μέθοδο με το ίδιο όνομα και να εκτελέσει αυτή τη μέθοδο;

Δημοσιεύθηκε 09/10/2019 στις 18:55
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Αυτό είναι ακριβώς το πώς να επικαλούνται λειτουργία κατά τη διάρκεια της εκτέλεσης

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

Πάρτε ένα παράδειγμα αυτής της κατηγορίας:

public class Operations {
    public double sum(int a, double b) {
        return a + b;
    }

    public static double multiply(float a, long b) {
        return a * b;
    }
}

Κατ 'αρχάς, θα πρέπει να πάρετε ένα αντικείμενο μέθοδο που αντανακλά τον τρόπο που θέλουμε να επικαλεσθεί. Εντάξει, τώρα χρειαζόμαστε τη λειτουργία getDeclaredMethod. Γι 'αυτό, πρέπει να δημιουργήσουμε ένα αντικείμενο της μεθόδου της κατηγορίας. Μπορούμε να χρησιμοποιήσουμε αυτή τη λειτουργία getDeclaredMethod να καλέσει κάποιον άλλο δημόσιο, ιδιωτικό, προστατευμένο μέθοδο . Δεν έχει σημασία αν η μέθοδος είναι στατική ή όχι.

Method sumMethod= Operations.class.getDeclaredMethod("sum", int.class, double.class);

Παρατηρήστε ένα πράγμα, ότι int.class & double.class αντιλαμβάνεται τις παραμέτρους που υπάρχουν στο συγκεκριμένη λειτουργία.

Τώρα να κινήσει τη μέθοδο, χρησιμοποιήστε .invoke()τη λειτουργία.

double value = sumMethod.invoke(null, 1,2.5);

Παρατηρήστε ότι έχω περάσει null ως το 1ο επιχείρημα, ότι είναι γιατί ζητώ μια στατική μέθοδο. Εάν χρειαστεί να καλέσετε μια μέθοδο παράδειγμα, θα πρέπει να περάσει το αντικείμενο στη θέση του null.

Η ελπίδα αυτό βοηθά! Για περισσότερες πληροφορίες: https://www.baeldung.com/java-method-reflection

Απαντήθηκε 09/10/2019 στις 19:12
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more