4

このジェネリックコードを検討してください。

interface Collection<E>  {  
   public void add (E x);  
   public Iterator<E> iterator(); 
} 

そしてこれ:

public class MyClass<V> {
    V v;
    setSomeValue(V val) {
       v=val;
    }

    V getSomeValue() {
        return v;
    }
 }

私の質問:角かっこでそれらの文字を実行してください: <V>そして<E> 特定の意味を持っています。英語のアルファベットは使えますか?つまり、彼らはまたはであることができます <A><Q>

4

6 に答える 6

8

それらは有効なJava識別子である必要があります(コメントで指摘されているように必ずしも1文字だけではありません)。技術的には、好きな識別子を使用でき、コードはコンパイルされて正常に実行されます(もちろん他のエラーがない場合)。

ただし、慣例に従うのは良いことです。これは単一大文字になる傾向があります。一般的なものには、Eそれぞれ要素、タイプ、キー、値を表す、、、があります。ユースケースはこれらのカテゴリのいずれかに当てはまる可能性があります。その場合は、これらの文字を使用します。上記の例の場合、クラスには要素が含まれているため、を使用します。TKVCollectionE

于 2012-10-02T08:39:34.213 に答える
1
interface Collection<E>  {  
   public void add (E x);  
   public Iterator<E> iterator(); 
}

このようなインターフェイスを定義するということは、コンパイラに、このインターフェイスの任意の型の参照を作成できることを伝えていることを意味します...ただし、lettersジェネリック型を示すためだけに使用する必要があります。

理想的には、使用する必要があるのは制約ではありませんT, E, or V..それらのいずれかを使用できます..ただし、特定の規則に従うと、コードが読みやすくなります..

K - Key, V - Value.. このような..

したがって、上記のインターフェースの参照は次のようになります。

Collection<String>, Collection<Integer>, Collection<YourCustomObject>

そして、あなたが使用するタイプが何であれ、それは自動的にあなたmethod return typesparameters..に反映されます。

したがって、の場合Collection<String>、メソッドは次のようになります。-]

   public void add (String x);  
   public Iterator<String> iterator();
于 2012-10-02T08:39:22.793 に答える
0

私は彼らが手紙でなければならないと思います。これらは基本的にクラス名のプレースホルダーです。したがって、MyClassをインスタンス化する場合は、次のことができます。

new MyClass<String>();

これにより、コード内のすべてのVが文字列に置き換えられます。

このレッスンでは、ジェネリックについて詳しく説明します

このレッスンを引用するには

最も一般的に使用されるタイプパラメータ名は次のとおりです。

E - Element (used extensively by the Java Collections Framework)
K - Key
N - Number
T - Type
V - Value
S,U,V etc. - 2nd, 3rd, 4th types
于 2012-10-02T08:37:55.803 に答える
0

EなどVは型パラメータです。単一の大文字である必要はありません。Javaで有効な識別子であるものなら何でも使用できます。

ほとんどすべての人が型パラメータに単一の大文字を使用します-これはほとんどすべての人が従う慣習なので、同じことを強くお勧めします。

たとえば、次のようにすることもできます。

public class MyClass<Value> {
    Value v;
    setSomeValue(Value val) {
       v=val;
    }

    Value getSomeValue() {
        return v;
    }
 }
于 2012-10-02T09:21:47.067 に答える
0

通常はそうですが、コンパイラーはあなたが望むようにそれらに名前を付けましょう。タイプの総称名を表すため、他のタイプと同じです。

規則は次のとおりです。

T-タイプ; カスタムクラスで最もよく使用されます

E-要素; コレクションで使用

K-キー; マップで使用

V-値; マップで使用

于 2012-10-02T08:39:09.330 に答える
0

それらEまたはVまたは何でも単なる変数です。彼らは、コードを書いている時点でタイプが不明であることを示唆しているだけです。これはまた、非常に多くのタイプのオブジェクトに同じクラスを使用することにより、ジョブを簡素化します。

これらはから理解することができますhttp://docs.oracle.com/javase/tutorial/java/generics/index.html

The most commonly used type parameter names are:
    E - Element (used extensively by the Java Collections Framework)
    K - Key
    N - Number
    T - Type
    V - Value
    S,U,V etc. - 2nd, 3rd, 4th types

wildcardsそれ以外の場合は、Javaのように定義できます。typesこれらのジェネリックは主に、を必要とせずに多くの人に適用できる単一のクラスを作成するために使用されcastingます。

于 2012-10-02T08:45:10.933 に答える