Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java - Algemeen

Het zou leuk zijn als we een enkele sorteermethode zouden kunnen schrijven die de elementen in een Integer-array, een String-array of een array van elk type dat ordening ondersteunt, zou kunnen sorteren.

Java Algemeen Met methoden en generieke klassen kunnen programmeurs respectievelijk met een enkele methodedeclaratie een reeks gerelateerde methoden of met een enkele klassendeclaratie een reeks verwante typen specificeren.

Generics bieden ook typebeveiliging tijdens het compileren waarmee programmeurs ongeldige typen kunnen onderscheppen tijdens het compileren.

Met behulp van het Java Generic-concept kunnen we een generieke methode schrijven voor het sorteren van een array van objecten, en vervolgens de generieke methode aanroepen met Integer-arrays, Double arrays, String-arrays enzovoort, om de array-elementen te sorteren.

Algemene methoden

U kunt een enkele generieke methodedeclaratie schrijven die kan worden aangeroepen met argumenten van verschillende typen. Op basis van de typen argumenten die aan de generieke methode zijn doorgegeven, behandelt de compiler elke methodeaanroep op de juiste manier. Hieronder volgen de regels om generieke methoden te definiëren −

  • Alle generieke methodedeclaraties hebben een typeparametersectie die wordt gescheiden door punthaken () die voorafgaat aan het retourtype van de methode ( in het volgende voorbeeld).

  • Elke sectie met typeparameters bevat een of meer typeparameters, gescheiden door komma's. Een typeparameter, ook wel typevariabele genoemd, is een identifier die een generieke typenaam specificeert.

  • De typeparameters kunnen worden gebruikt om het retourtype te declareren en fungeren als tijdelijke aanduidingen voor de typen argumenten die worden doorgegeven aan de generieke methode, die bekend staan ​​als feitelijke typeargumenten.

  • De body van een generieke methode wordt gedeclareerd zoals die van elke andere methode. Merk op dat typeparameters alleen referentietypen kunnen vertegenwoordigen, geen primitieve typen (zoals int, double en char).

Voorbeeld

Het volgende voorbeeld illustreert hoe we een reeks van verschillende typen kunnen afdrukken met behulp van een enkele algemene methode −

Live demo
public class GenericMethodTest {
   // generic method printArray
   public static < E > void printArray( E[] inputArray ) {
      // Display array elements
      for(E element : inputArray) {
         System.out.printf("%s ", element);
      }
      System.out.println();
   }

   public static void main(String args[]) {
      // Create arrays of Integer, Double and Character
      Integer[] intArray = { 1, 2, 3, 4, 5 };
      Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
      Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

      System.out.println("Array integerArray contains:");
      printArray(intArray);   // pass an Integer array

      System.out.println("\nArray doubleArray contains:");
      printArray(doubleArray);   // pass a Double array

      System.out.println("\nArray characterArray contains:");
      printArray(charArray);   // pass a Character array
   }
}

Dit levert het volgende resultaat op −

Uitvoer

Array integerArray contains:
1 2 3 4 5 

Array doubleArray contains:
1.1 2.2 3.3 4.4 

Array characterArray contains:
H E L L O

Begrensde typeparameters

Het kan voorkomen dat u de typen typen wilt beperken die aan een typeparameter mogen worden doorgegeven. Een methode die op getallen werkt, wil bijvoorbeeld mogelijk alleen exemplaren van Number of zijn subklassen accepteren. Dit is waar de parameters van het begrensde type voor zijn.

Om een ​​begrensde typeparameter te declareren, vermeldt u de naam van de typeparameter, gevolgd door het sleutelwoord extends, gevolgd door de bovengrens.

Voorbeeld

Het volgende voorbeeld illustreert hoe extends in algemene zin wordt gebruikt om ofwel "verlengt" (zoals in klassen) of "implementeert" (zoals in interfaces) te betekenen. Dit voorbeeld is een algemene methode om de grootste van drie vergelijkbare objecten te retourneren −

Live demo
public class MaximumTest {
   // determines the largest of three Comparable objects
   
   public static <T extends Comparable<T>> T maximum(T x, T y, T z) {
      T max = x;   // assume x is initially the largest
      
      if(y.compareTo(max) > 0) {
         max = y;   // y is the largest so far
      }
      
      if(z.compareTo(max) > 0) {
         max = z;   // z is the largest now                 
      }
      return max;   // returns the largest object   
   }
   
   public static void main(String args[]) {
      System.out.printf("Max of %d, %d and %d is %d\n\n", 
         3, 4, 5, maximum( 3, 4, 5 ));

      System.out.printf("Max of %.1f,%.1f and %.1f is %.1f\n\n",
         6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ));

      System.out.printf("Max of %s, %s and %s is %s\n","pear",
         "apple", "orange", maximum("pear", "apple", "orange"));
   }
}

Dit levert het volgende resultaat op −

Uitvoer

Max of 3, 4 and 5 is 5

Max of 6.6,8.8 and 7.7 is 8.8

Max of pear, apple and orange is pear

Algemene lessen

Een generieke klassedeclaratie ziet eruit als een niet-generieke klassedeclaratie, behalve dat de klassenaam wordt gevolgd door een typeparametersectie.

Net als bij generieke methoden, kan de sectie typeparameter van een generieke klasse een of meer typeparameters hebben, gescheiden door komma's. Deze klassen staan ​​bekend als geparametriseerde klassen of geparametriseerde typen omdat ze een of meer parameters accepteren.

Voorbeeld

Het volgende voorbeeld illustreert hoe we een generieke klasse kunnen definiëren −

Live demo
public class Box<T> {
   private T t;

   public void add(T t) {
      this.t = t;
   }

   public T get() {
      return t;
   }

   public static void main(String[] args) {
      Box<Integer> integerBox = new Box<Integer>();
      Box<String> stringBox = new Box<String>();
    
      integerBox.add(new Integer(10));
      stringBox.add(new String("Hello World"));

      System.out.printf("Integer Value :%d\n\n", integerBox.get());
      System.out.printf("String Value :%s\n", stringBox.get());
   }
}

Dit levert het volgende resultaat op −

Uitvoer

Integer Value :10
String Value :Hello World

Java

  1. Java-gegevenstypen (primitief)
  2. Java-operators
  3. Java-opmerkingen
  4. Java voor elke lus
  5. Java-strings
  6. Java-interface
  7. Java proberen-met-bronnen
  8. Java-annotaties
  9. Java-beweringen
  10. Java Type Casting
  11. Java-generieken