51

以下に示すような方法を見てきました。

protected <T extends ABC> T save( T Acd, boolean en) {

それは何をするためのものか?Javaで呼び出されるこれらのタイプのメソッド宣言は何ですか?


Varnish 3.0 は gzip をどのように処理しますか?

Varnish は圧縮された obj をキャッシュに保持しますが、クライアントが gzip をサポートしていない場合。

Varnish はどのように対処しますか? 他の圧縮されていない obj もキャッシュに保持しますか、それとも圧縮された obj を解凍しますか?

4

7 に答える 7

46

これはジェネリックメソッドと呼ばれます。この全体の概念は、Java では「ジェネリック」と呼ばれます。この宣言は、T が ABC のサブクラスである任意の型であることを意味します。

于 2012-10-17T06:31:20.520 に答える
19

境界型パラメーター:

型パラメーターに渡すことができる型の種類を制限したい場合があります。たとえば、数値を操作するメソッドは、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" ) );
   }
}
于 2012-10-17T06:53:25.993 に答える
4

これは、genericパラメーター T とブール型 (T は ABC クラスによって上限を設定する必要がある) を除く保存メソッドです。ABC クラスまたは任意のサブクラスが受け入れられます。

于 2012-10-17T06:32:09.787 に答える
3

これは、 のオブジェクトまたは子を送信する必要があり、他のクラスは許可されないことを意味します。また、変数は、メソッドを含むクラスに表示されるクラスのメソッドを使用できます。ABCABCAcdABCsave

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!
    }
}
于 2012-10-17T06:30:50.170 に答える
3

これはジェネリックです。型境界のあるジェネリック!

こちらを参考に

于 2012-10-17T06:31:38.680 に答える
3

これは Java ではジェネリックと呼ばれます。

公式説明

簡単に言えば、ジェネリックは、クラス、インターフェイス、およびメソッドを定義するときに、型 (クラスとインターフェイス) をパラメーターにすることを可能にします。メソッド宣言で使用される一般的な形式パラメーターと同様に、型パラメーターを使用すると、同じコードを異なる入力で再利用できます。違いは、仮パラメーターへの入力が値であるのに対し、型パラメーターへの入力は型であることです。

非公式に:

Java のような厳密に型指定された言語では、実行時ではなくコンパイル時に多くのエラーが表示されます。これは良いことです。ただし、コードの重複が発生します。このジェネリックを軽減するために、Java に追加されました。

于 2016-06-10T15:42:50.770 に答える