私は、以下に示すような方法で見てきました:それは何をするん<Tは何を意味するのですか?
protected <T extends ABC> T save(T Acd, boolean en) {
を? Javaで呼び出されるこれらのタイプの宣言は何ですか?
私は、以下に示すような方法で見てきました:それは何をするん<Tは何を意味するのですか?
protected <T extends ABC> T save(T Acd, boolean en) {
を? Javaで呼び出されるこれらのタイプの宣言は何ですか?
それは一般的な方法と呼ばれています。この全体のコンセプトは、Javaでは「ジェネリックス」と呼ばれています。その宣言は、TがABCのサブクラスである任意の型であることを意味します。
アルファベットを使用できますか?またはそれがジェネリックメソッドであることを言い表す唯一の宣言型はTですか? –
任意の文字を使用できます。 Tは「Type」の略語です。マップ構造では、 "Key"と "Value"タイプを意味する
汎用タイプの引数には任意の有効な識別子を使用できますが、大文字である必要があります。この回答を参照してください:http://stackoverflow.com/questions/2900881/generic-type-parameter-naming-convention-for-java-with-multiple-chars 'List
ABC
オブジェクトまたはABC
の子を送信する必要があります。他のクラスは許可されません。また、Acd
変数はABC
クラスのメソッドを使用することができます。このメソッドは、そのクラスに表示されるsave
メソッドです。
これは、T
クラスがインターフェイスを拡張する場合に便利です。たとえば、あなたがそうでない場合、配列は許可されません、オブジェクト配列をソートすると、このクラスが TNE Comparable
インタフェースを実装する必要があります処理するクラスを作成している:
class Class1 implements Comparable<Class1> {
//attributes, getters and setters...
int x;
//implementing the interface...
public int compareTo(Class1 c1) {
//nice implementation of compareTo
return (this.x > c1.x)? 1 : (this.x < c1.x) ? 0 : -1;
}
}
class Class2 {
int x;
}
public class Sorter<T extends Comparable<T>> {
public static void insertionSort(T[] array) {
//good implementation of insertion sort goes here...
//just to prove that you can use the methods of the Comparable interface...
array[0].compareTo(array[1]);
}
public static void main(String[] args) {
Class1[] arrC1 = new Class1[5];
Class2[] arrC2 = new Class2[5];
//fill the arrays...
insertionSort(arrC1); //good!
insertionSort(arrC2); //compiler error!
}
}
これは一般的なものです。型の境界を持つジェネリック!
これは、パラメータTおよびTは、ABCクラスによって上部境界されなければならないboolean型をexceptsでsave method
です。 ABCクラスまたは任意のサブクラスが受け入れられます。
有界型パラメータ:
あなたは型パラメータに渡すことが許可されているタイプの種類を制限したいと思うときがあるかもしれません。たとえば、数値で動作するメソッドは、Numberまたはそのサブクラスのインスタンスを受け入れるだけの場合があります。これは、有界型パラメータのためのものです。
境界型パラメータを宣言するには、型パラメータの名前を指定し、続いてextendsキーワードを指定し、その後にその上限を指定します。 例:
次の例では、extendsが(クラスのように)または「実装する」(インタフェースのように)一般的な意味でどのように使用されるかを示します。この例は、3つのComparableオブジェクトのうち最大のものを返す汎用メソッドです。
public class MaximumTest
{
// determines the largest of three Comparable objects
public static <T extends Comparable<T>> T maximum(T x, T y, T z)
{
T max = x; // assume x is initially the largest
if (y.compareTo(max) > 0){
max = y; // y is the largest so far
}
if (z.compareTo(max) > 0){
max = z; // z is the largest now
}
return max; // returns the largest object
}
public static void main(String args[])
{
System.out.printf("Max of %d, %d and %d is %d\n\n",
3, 4, 5, maximum(3, 4, 5));
System.out.printf("Maxm of %.1f,%.1f and %.1f is %.1f\n\n",
6.6, 8.8, 7.7, maximum(6.6, 8.8, 7.7));
System.out.printf("Max of %s, %s and %s is %s\n","pear",
"apple", "orange", maximum("pear", "apple", "orange"));
}
}
これはJavaのジェネリックスと呼ばれます。
公式の説明:簡単に言えば、ジェネリックスは、クラス、インターフェース、メソッドを定義するときに型(クラスとインターフェース)をパラメーターにすることができます。メソッド宣言で使用されるよりよく知られている仮パラメータと同様に、型パラメータは、異なるコードで同じコードを再利用する方法を提供します。違いは、仮パラメータへの入力は値であり、型パラメータへの入力は型である点です。
非公式に:Javaのような強く型付けされた言語では、実行時ではなくコンパイル時にエラーが発生します。これは良いことです。しかし、それはコードの重複を引き起こします。このジェネリックを緩和するために、Javaに追加されました。
いくつかのチュートリアルを参照してください。 - http://docs.oracle.com/javase/tutorial/extra/generics/index.html –
構造がどのように呼び出されているのか尋ねるのは悪いことではありません。+1 –