java:generic_methods

Παραμετρικές Μέθοδοι (Generic Methods)

Generic Methods ονομάζονται οι μέθοδοι οι οποίες εισάγουν τους δικούς τους παραμετρικούς τύπους δεδομένων, χωρίς η κλάση στην οποία ανήκουν να εισάγει αντίστοιχους παραμετρικούς τύπους δεδομένων, όπως παρακάτω:

Util.java
public class Util {
  public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
    return p1.getKey().equals(p2.getKey()) &&
      p1.getValue().equals(p2.getValue());
  }
}

Ο κώδικας για να καλέσετε μία έκδοση της παραπάνω μεθόδου δίνεται παρακάτω

OrderedPairUsage.java
public class OrderedPairUsage {
  public static void main(String args[]) {
    Pair<Integer, String> p1 = 
      new OrderedPair<>(1, "Black");
    Pair<Integer, String> p2 = 
      new OrderedPair<>(1, "Red");
    boolean same = Util.<Integer, String>compare(p1, p2);
    //OR boolean same = Util.compare(p1, p2);
    if( same ) {
      System.out.println("p1 is equal to p2");
    } 
    else {
      System.out.println("p1 is NOT equal to p2");
    }
  }
}

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

Δοκιμάστε να μεταγλωττίσετε τις παρακάτω δύο παραλλαγές του κώδικα και δείτε τα μηνύματα που θα σας βγάλει ο compiler.

OrderedPairUsage.java
public class OrderedPairUsage {
  public static void main(String args[]) {
    Pair<Integer, String> p1 = 
      new OrderedPair<>(1, "Black");
    Pair<Integer, String> p2 = 
      new OrderedPair<>(1, "Red");
    boolean same = Util.<Integer, Integer>compare(p1, p2);
    if( same ) {
      System.out.println("p1 is equal to p2");
    } 
    else {
      System.out.println("p1 is NOT equal to p2");
    }
  }
}
OrderedPairUsage.java
public class OrderedPairUsage {
  public static void main(String args[]) {
    Pair<Integer, String> p1 = 
      new OrderedPair<>(1, "Black");
    Pair<Integer, Integer> p2 = 
      new OrderedPair<>(1, 3);
    boolean same = Util.compare(p1, p2);
    if( same ) {
      System.out.println("p1 is equal to p2");
    } 
    else {
      System.out.println("p1 is NOT equal to p2");
    }
  }
}
java/generic_methods.txt · Last modified: 2016/02/26 11:15 (external edit)