Java >> Programma Java >  >> Java

Java 5 – Tipi limitati in generici

Nell'articolo precedente, abbiamo discusso sulla classe Generics che aiuta a creare un'istanza solo con un particolare parametro-tipo e in questo modo le classi Generics forniscono sicurezza dei tipi

1. Tipi illimitati:

  • Ma quello che succede è che permette di creare un'istanza con uno qualsiasi dei seguenti tipi,
    1. Tipi di involucro
    2. Tipi di riferimento come classe/interfaccia
  • In realtà, non abbiamo il controllo sulla limitazione di una classe Generics per limitarsi e questo tipo di classi Generics è chiamato tipi illimitati
  • Ad esempio, in GenericsClass.java di seguito consente di sostituire qualsiasi tipo con parametro-tipo T

GenericsClass.java

package in.bench.resources.generics.example;

public class GenericsClass<T> {

	// member variable
	T t;

	//	1-arg constructor
	public GenericsClass(T t) {
		super();
		this.t = t;
	}

	// getter & setter
	public T getT() {
		return t;
	}

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

TestGenerics.java

package in.bench.resources.generics.example;

public class TestGenerics {

	public static void main(String[] args) {

		// 1. instantiate Generics class with String
		GenericsClass<String> gcStr =
				new GenericsClass<String>("TestString");

		// 2. instantiate Generics class with Float
		GenericsClass<Float> gcFlt =
				new GenericsClass<Float>(25.306f);

		// 3. instantiate Generics class with Double
		GenericsClass<Double> gcDbl =
				new GenericsClass<Double>(20152.137);

		// 4. instantiate Generics class with Integer
		GenericsClass<Integer> gcInt =
				new GenericsClass<Integer>(64);
	}
}

Spiegazione:

  • Nell'esempio sopra GenericsClass.java , abbiamo specificato Parametro-tipo senza vincolo, che consente di utilizzare questa classe con qualsiasi tipo valido come wrapper-type o tipi di riferimento
  • In TestGenerics.java , abbiamo creato un'istanza di GenericsClass con 4 oggetti diversi
  • Qui abbiamo usato il tipo String e 3 diversi tipi di wrapper come Integer, Float e Double
  • Quindi, definire la classe Generics con il solo parametro Tipo T è noto come tipi illimitati, poiché consente di sostituire qualsiasi classe/interfaccia con il parametro Tipo T

2. Tipi limitati:

  • Mettere limite a Tipo-parametro per specificare intervallo particolare mentre la definizione della classe Generics è nota come Tipi limitati o Classi limitate
  • Per definire il limite, possiamo usare extends parola chiave secondo la sintassi seguente
  • Sintassi:
<T extends referenceType>
  • Questo Tipo di riferimento può essere una classe/interfaccia
  • Se referenceType è una classe , quindi il parametro Tipo T può essere sostituito da una classe o da una delle sue sottoclassi
  • Allo stesso modo, se referenceType è un'interfaccia , quindi il parametro Tipo T può essere sostituito da un'interfaccia o da una delle sue classi di implementazione
  • Vediamo un esempio basato sui tipi limitati

GenericsClass.java

package in.bench.resources.generics.example;

public class GenericsClass<T extends Number> {

	// member variable
	T t;

	//	1-arg constructor
	public GenericsClass(T t) {
		super();
		this.t = t;
	}

	// getter & setter
	public T getT() {
		return t;
	}

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

TestGenerics.java

Spiegazione:

In GenericsClass.java sopra esempio,

  • Abbiamo specificato parametro-tipo con limite superiore come Numero che permette di accettare sia la classe Number che le sue sottoclassi come Integer, Double o Float, ecc.
  • Ma in TestGenerics. Java , quando abbiamo provato a creare un'istanza di GenericClass con altri tipi, un errore in fase di compilazione viene lanciato affermando "Mancata corrispondenza associata
  • Alla linea n. 14 e 20, il compilatore non si lamenta di nulla perché sia ​​Float che Integer sono sottoclassi di Number
  • Mentre alla riga n. 8 e 17 compilatore genera errore per Mancata corrispondenza vincolata come mostrato nella schermata precedente perché né String né StringBuffer è una sottoclasse di Numero classe
  • Nota: possiamo definire il tipo limitato con estende solo parola chiave, non sono consentite altre parole chiave

3. Combinazione di tipi limitati:

Finora abbiamo visto tipi limitati con limite di una classe ma in realtà possiamo usare una combinazione di classe e interfacce, come le possibili combinazioni sono elencate di seguito,

  1. Massimo una classe
  2. Massimo una classe e un'interfaccia
  3. Interfacce multiple
  4. Massimo una classe e più interfacce

Nota: mentre definisci una combinazione di tipi limitati, usa la e commerciale (& ) firma per separare la classe e le interfacce

Tutte le combinazioni dichiarate sopra sono valide per i tipi limitati che utilizzano extends la parola chiave ma le seguenti sono dichiarazioni non valide e il compilatore genera un errore

  1. Più classi (es.; 2 o più classi)
  2. Prima interfaccia e poi classe (la sequenza conta)

3.1 Combinazione valida per i tipi limitati:

  1. Una classe
  2. Una classe e un'interfaccia
  3. Interfacce multiple
  4. Una classe e più interfacce

3.2 Combinazione non valida per i tipi limitati:

  1. Classi multiple (es.; 2 o più classi)
  2. Prima l'interfaccia e poi la classe (la sequenza conta in combinazione di tipi limitati)

Spero che tu abbia trovato questo articolo molto utile. Se hai qualche suggerimento o vuoi contribuire o una situazione difficile che hai dovuto affrontare durante l'orario del colloquio, condividi con noi. Includeremo quel codice qui.


Etichetta Java