【Java汎型】Java汎型の方法、クラスをどう定義しますか?
3627 ワード
Java汎型(generaics)汎型方法Java汎型方法と汎型サポートプログラマは、1つの方法を使用して関連方法のセットを指定したり、関連するタイプのグループを指定したりする.作用:Java汎型の概念を使用して、一つのオブジェクト配列を並べ替えるために汎型法を書くことができます.次に、この汎型方法を呼び出して、整型配列、浮動小数点配列、文字列配列などを並べ替える.一般的に一つの汎型方法を起動すると、異なる種類のパラメータを受信することができます.一般的な方法のルールを定義します.1.すべての一般的な方法は、(山かっこで区切られた)タイプのパラメータ宣言部分があります.このタイプのパラメータ宣言は、方法がタイプに戻る前の部分です.2.各タイプのパラメータ宣言の部分には、1つまたは複数のタイプのパラメータが含まれています.パラメータ間はカンマで区切られています.一つの汎型パラメータは、一つのタイプ変数とも呼ばれ、一つの汎型の名前を指定する識別子である.3.種類のパラメータは、戻り値の種類を宣言し、汎型法で得られる実際のパラメータタイプのプレースホルダとして使用できます.4.汎型法の方法体の声明は他の方法と同じである.注意型パラメータは、引用型のみを表し、元のタイプではありません.
たとえば:
定義:汎型クラスの声明と非汎型クラスの声明は類似しています.類名の後にタイプパラメータ宣言部分を追加したことを除いて.ルール:一般的な方法と同様に、一般的なクラスのタイプのパラメータ宣言部分も1つまたは複数のタイプのパラメータを含み、パラメータ間はカンマで区切られます.一つの汎型パラメータは、一つのタイプ変数とも呼ばれ、一つの汎型の名前を指定する識別子である.彼らは1つ以上のパラメータを受け入れるので、これらのクラスはパラメータ化されたクラスまたはパラメータ化のタイプと呼ばれています.たとえば:
たとえば:
public class GenericMethodTest
{
// printArray
public static < E > void printArray( E[] inputArray )
{
//
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
public static void main( String args[] )
{
// : Integer, Double 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 ); //
System.out.println( "
Array doubleArray contains:" );
printArray( doubleArray ); //
System.out.println( "
Array characterArray contains:" );
printArray( charArray ); //
}
}
汎型類定義:汎型クラスの声明と非汎型クラスの声明は類似しています.類名の後にタイプパラメータ宣言部分を追加したことを除いて.ルール:一般的な方法と同様に、一般的なクラスのタイプのパラメータ宣言部分も1つまたは複数のタイプのパラメータを含み、パラメータ間はカンマで区切られます.一つの汎型パラメータは、一つのタイプ変数とも呼ばれ、一つの汎型の名前を指定する識別子である.彼らは1つ以上のパラメータを受け入れるので、これらのクラスはパラメータ化されたクラスまたはパラメータ化のタイプと呼ばれています.たとえば:
public class Box {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
public static void main(String[] args) {
Box integerBox = new Box();
Box stringBox = new Box();
integerBox.add(new Integer(10));
stringBox.add(new String("Hello World"));
System.out.printf("Integer Value :%d
", integerBox.get());
System.out.printf("String Value :%s
", stringBox.get());
}
}
*補足:**境界のあるタイプのパラメータ:すなわち、一つのタイプのパラメータに渡すことが許される種類の範囲を制限します.例えば、数字を操作する方法は、NumberまたはNumberのサブクラスの例だけを受け入れることを望むかもしれない.これが境界タイプのパラメータの目的です.境界のあるタイプのパラメータを宣言するには、まずタイプのパラメータの名前を列記し、最後に上位の項目をフォローします.コードの例:public class MaximumTest
{
//
public static > T maximum(T x, T y, T z)
{
T max = x; // x
if ( y.compareTo( max ) > 0 ){
max = y; //y
}
if ( z.compareTo( max ) > 0 ){
max = z; // z
}
return max; //
}
public static void main( String args[] )
{
System.out.printf( "Max of %d, %d and %d is %d
",
3, 4, 5, maximum( 3, 4, 5 ) );
System.out.printf( "Maxm of %.1f,%.1f and %.1f is %.1f
",
6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );
System.out.printf( "Max of %s, %s and %s is %s
","pear",
"apple", "orange", maximum( "pear", "apple", "orange" ) );
}
}
【宏然名残惜し学習ノート】教程リンク:https://www.w3cschool.cn/java/java-generics.html