Heim > Java > javaLernprogramm > So definieren Sie eingeschränkte Typparameter in Java

So definieren Sie eingeschränkte Typparameter in Java

coldplay.xixi
Freigeben: 2020-08-22 17:14:52
nach vorne
3231 Leute haben es durchsucht

So definieren Sie eingeschränkte Typparameter in Java

【Verwandte Lernempfehlung: Basic Java Tutorial

Manchmal möchten Sie möglicherweise die Typen einschränken, die als Typparameter in einem parametrisierten Typ verwendet werden können. Beispielsweise möchte eine Methode, die mit Zahlen arbeitet, möglicherweise nur Instanzen von Number oder einer seiner Unterklassen akzeptieren. Dafür gibt es begrenzte Typparameter.

Methodenbeispiel für einen eingeschränkten Parametertyp

Um einen begrenzten Typparameter zu deklarieren, listen Sie den Namen des Typparameters auf, gefolgt vom Schlüsselwort „extens“ und dann seiner Obergrenze, in diesem Fall „Number“. Bitte beachten Sie, dass in In In diesem Fall bedeutet „extends“ normalerweise „Erweiterung“ (wie in einer Klasse) oder „Implementierung“ (wie in einer Schnittstelle).

package generics;

/**
 * 定义受限制的方法
 * 
 * @author psdxdgK1DT
 *
 */
public class Box<T> {

	private T t;

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

	public T get() {
		return t;
	}
/**
	 * 通过修改我们的通用泛型方法以包含此有界类型参数,现在编译将失败,因为我们对inspect的调用仍包含String:
	 * By modifying our generic method to include this bounded type parameter
	 * compilation will now fail, since our invocation of inspect still includes a String:
	 * inspect:单词:检查
	 * @param <U>
	 * @param u
	 */
	public <U extends Number> void inspect(U u) {
		System.out.println("T:" + t.getClass().getName());
		System.out.println("U:" + u.getClass().getName());
	}

	public static void main(String[] args) {
		Box<Integer> integerBox = new Box<Integer>();
		integerBox.set(new Integer("some text"));
		integerBox.inspect("some test");这里会出现预编译错误

		integerBox.inspect(10);
	}
}
Nach dem Login kopieren

Eine rote Wellenlinie erscheint auf dem Display, um einen Kompilierungsfehler anzuzeigen

Wenn die Kompilierung erzwungen wird, wird ein Fehler gemeldet:

Ergebnis der Programmausführung:

Ausnahme im Java-Thread „main“. lang.Error: Ungelöstes Kompilierungsproblem: Die Methode inspect(U) im Typ Box ist für die Argumente (String)

at generics.Box.main(Box.java:36)

Translation:

nicht anwendbar Ungelöster Kompilierungsfehler

Die inspect(U)-Methode der Box-Klasse kann nicht auf Parameter vom Typ (String) angewendet werden

Klassen, die eingeschränkte Typparameter verwenden, können eingeschränkte Grenzmethoden aufrufen

Zusätzlich zur Einschränkung der möglichen Typen Um generische Typen zu instanziieren, ermöglichen begrenzte Typparameter auch den Aufruf von Methoden, die in den Grenzen definiert sind:

//使用受限类型参数的类
public class NaturalNumber<T extends Integer> {

  private T n;
  public NaturalNumber(T n) { this.n = n; }

  public boolean isEven() {
    return n.intValue() % 2 == 0;
  }

  // ...
Nach dem Login kopieren

isEven-Methode ruft die intValue-Methode auf, die in der Integer-Klasse durch n definiert ist.

Mehrere Grenzen

Das vorangehende Beispiel veranschaulicht die Verwendung eines Typparameters mit einer einzelnen Grenze, aber ein Typparameter kann mehrere Grenzen haben:

Class A { /* … / } interface B { / … / } interface C { / … */ }

class D { /* … */ } Wenn gebunden A nicht zuerst angegeben wird, erhalten Sie einen Fehler bei der Kompilierung:

class D { /* … */ } // Fehler bei der Kompilierung

Generischer Algorithmus

Begrenzte Typparameter sind der Schlüssel zur Implementierung generischer Algorithmen. Betrachten Sie die folgende Methode, die die Anzahl der Elemente in einem Array T[] zählt, die größer als das angegebene Element elem sind.

public static <T> int countGreaterThan(T[] anArray, T elem) {
  int count = 0;
  for (T e : anArray)
    if (e > elem) // compiler error
      ++count;
  return count;
}
The implementation of the method is straightforward,
but it does not compile because the greater than operator (>) applies only to primitive types
such as short, int, double, long, float, byte, and char. 
You cannot use the > operator to compare objects. To fix the problem, use a type parameter
bounded by the Comparable<T> interface:

public interface Comparable<T> {
  public int compareTo(T o);
}
The resulting code will be:

public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
  int count = 0;
  for (T e : anArray)
  //因为这里的T是受限制的类型参数,实现了Comparable接口,于是可以使用接口的方法compareTo
    if (e.compareTo(elem) > 0)
      ++count;
  return count;
}
Nach dem Login kopieren

Verwandte Lernempfehlungen:
Programmiervideos

Das obige ist der detaillierte Inhalt vonSo definieren Sie eingeschränkte Typparameter in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage