Java generics provide a compile-time type-safe detection mechanism that allows programmers to detect illegal types at compile time. Java generics are needed when you need to use an algorithm that does not have a specific data type for the algorithm, or if you want to specify an upper or lower limit for the type value!
Rules for generic methods:
- All generic method declarations have a part of a type parameter declaration (delimited by angle brackets) that is part of the type parameter declaration before the method return type.
- Each type parameter declaration section contains one or more type parameters, separated by commas between the parameters. A generic parameter, also known as a type variable, is the identifier used to specify a generic type name.
- A type parameter can be used to declare a placeholder for the actual parameter type that returns a value type and can be obtained as a generic method.
- The declaration of a generic method body is the same as other methods. Note that the type parameter can only represent a reference type, not the original type (like Int,double,char, and so on).
Instance:
First, define a generic method to print the object array elements
1 Public Static<E>voidPrintArray (e[] inputarray) {2 for(E elements:inputarray) {3 System.out.print (elements);4 }5 }6 7 Public Static voidMain (string[] args) {8Integer[] intarray={4,5,6,5,8};9Double[] Doublearray = {1.1, 2.2, 3.3, 4.4 };TenCharacter[] Chararray = {' H ', ' E ', ' l ', ' l ', ' O ' }; One ASystem.out.println ("Integer array element is:" ); - PrintArray (intarray); - theSystem.out.println ("\ n double-array element:" ); - PrintArray (doublearray); - -System.out.println ("\ n character array element is:" ); + PrintArray (chararray); -}
Second, define a generic method to sort the numbers (extends use)
1 Public Static<eextendsComparable>e searchmaxnumber (e x,e y,e z) {2E maxnumber=x;3 if(Y.compareto (MaxNumber) > 0){4Maxnumber=y;5 }6 if(Z.compareto (MaxNumber) >0){7Maxnumber=Z;8 }9 returnMaxNumber;Ten } One A Public Static voidMain (string[] args) { -SYSTEM.OUT.PRINTF (the largest number in "%d,%d, and%d is%d\n\n", -3, 4, 5, Searchmaxnumber (3, 4, 5 ) ); theSystem.out.printf ("%.1f,%.1f and%.1f the largest number is%.1f\n\n", -6.6, 8.8, 7.7, Searchmaxnumber (6.6, 8.8, 7.7 ) ); -SYSTEM.OUT.PRINTF (the largest number in "%s,%s, and%s is%s\n", "pear", -"Apple", "Orange", Searchmaxnumber ("Pear", "apple", "orange" ) ); +}
Iii. Definition of generic classes
1 Public classGenericityexam<e> {2 3 Privatee e;4 5 PublicE Get () {6 returne;7 }8 9 Public voidput (e e) {Ten This. e=e; One } A - Public Static voidMain (string[] args) { -Genericityexam<integer> Integerval =NewGenericityexam<integer>(); theGenericityexam<character> Charval =NewGenericityexam<character>(); - -Integerval.put (NewInteger (10)); -Charval.put (NewCharacter (' s '))); + -System.out.printf ("Integer value:%d\n", Integerval.get ()); +System.out.printf ("Character:%c\n", Charval.get ()); A } at -}
Four, type wildcard upper bound generic type
public static <E> void Listgen (list<? extends e> data) {
for (E Listdata:data) {
SYSTEM.OUT.PRINTLN ("Data:" + listData);
}
}
public static void Main (string[] args) {
list<integer> listin = new arraylist<> ();
list<number> LISTNU = new arraylist<> ();
Listin.add (18);
Listin.add (45);
Listnu.add (314);
Listnu.add (789);
Listgen (Listin);
Listgen (LISTNU);
}
- <? Extends e> indicates that the type represented by the wildcard is a subclass of type E.
- <? Super e> indicates that the type represented by the wildcard is the parent class of type E.
When a generic is defined, it changes to the object type during run time.
Java-Generic understanding