【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); } }
Eine rote Wellenlinie erscheint auf dem Display, um einen Kompilierungsfehler anzuzeigen
Wenn die Kompilierung erzwungen wird, wird ein Fehler gemeldet:
Ergebnis der Programmausführung:Translation: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)
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 aufrufenZusä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; } // ...
isEven-Methode ruft die intValue-Methode auf, die in der Integer-Klasse durch n definiert ist.
Mehrere GrenzenDas vorangehende Beispiel veranschaulicht die Verwendung eines Typparameters mit einer einzelnen Grenze, aber ein Typparameter kann mehrere Grenzen haben:
Generischer Algorithmus
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
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; }
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!