2017-04-19 3 views
0

私はtreemapクラスを作成しようとしていましたが、いくつかの問題がありました。 java.util.Map.Entryが型宣言で使用できる型の場合、なぜクラス見出しで使用できないのですか?なぜ私はmap.entry <k,v>を型として使用することはできませんか?可変宣言で可能です

このため、一般的な作業理由:このため

public class test5 <K extends Comparable<K>,V>{ 

    TreeSet <java.util.Map.Entry<K,V>> treeBack; 

} 

ない:

public class test5 <java.util.Map.Entry<K,V>>{ 

} 
+0

IDE /コンパイラでヒントが得られますか? – matt

+2

あなたの意見では、後者の宣言は何を意味しますか? – Kayaman

+1

クラス見出しには実数型は使用できません。実数型の拡張は許可されていますが、_variables、_型だけを入力してください。 –

答えて

0

は、私はあなたが意味を考える:

public class MyTest<K,V extends java.util.Map.Entry<K,V>> { 

} 
+0

そして、なぜあなたはopがそれを具体的に意味すると思いますか? –

+0

ええ、私はこう言っています: 'public class test > { }' – wheeler

+0

OPはVが 'Map.Entry'を拡張することを望んでいると思いませんか? – matt

0

あなたがのMap.Entryを拡張しようとしていますどこか?そのようにあなたのクラスを定義したいですか?クラスをジェネリック化するためにクラステンプレートを使用します。例えば

class GenericTreeMap<M extends Map.Entry> { 
    TreeSet<M> treeBack; 
} 

ため

次に、あなたは自分のツリーマップの実装でのMap.Entryを使用できるようにしたい場合は、あなたもする必要はありません。一方、GTM<CustomEntry> treeMapような何かを行うことができますテンプレート。あなた後者の場合

class GenericTreeMap { 
    TreeSet<Map.Entry> treeBack; 
} 
+0

質問は一般的な観察に基づいていますが、ツリーセットに基づいてツリーマップを実装するよう頼んでいるエクササイズをしている人は、私に多くの質問をしてくれました。質問は次のとおりです。タイプ TreeSet >のデータメンバーを格納して、TreeMapクラスの実装を記述します。 –

+0

私が理解するように、ジェネリックのタイプをジェネリックのタイプとして使用することは許可されていませんか? –

+0

もし私の元の質問のように、map.entryを型として扱う新しいツリーセットを宣言するのはなぜですか? –

0

、私はあなたがこのような何かを意味すると思う:

public class test5 <K, V, E extends java.util.Map.Entry<K,V>>{ 
    TreeSet<E> treeBack; 
} 

ジェネリック医薬品は、一般的な、彼らは音と同じようにしています。ジェネリック変数は、クラス自体であることはできません。これは、ジェネリック変数がジェネリックであるという固有のプロパティに違反するためです。クラスは指定されていません。

あなたは本質的に、あなたの一般的なパラメータはジェネリックパラメータで定義されたクラスを拡張する任意のクラスであることを意味し、クラスを拡張することを一般的な変数を作成し、しかしことができます。

0

変更点は何ですか?ちょうどKV? Map.Entryとは何が関係していますか?このようなことはどうですか?次に、パラメータ化されたMap.Entryを持つことができます。その場合KVにおいて

class Test<K,V>{ 
    TreeSet <java.util.Map.Entry<K,V>> treeBack; 
} 

パラメータ化された型です。 Map.Entryを拡張するテストが必要なのでしょうか?

class Test<K, V> extends Map.Entry<K, V> 

ここで、テスト自体はマップエントリです。

0

これは、有効な型の変数宣言ではないためです。

型の変数宣言は(彼らはまた、注釈を有することができ、その他の小物類)形態

Identifier 
Identifier extends ClassOrInterface 
Identifier extends AnotherTypeVariable 

等でなければならない

しかしポイントは、それらが識別子で開始しなければならないことです。 Java識別子にはピリオド、山括弧などは使用できません。

ので

class Foo<java> 

は(無分別場合)罰金だろうが、

class Foo<java.util> 

は動作しません。

関連する問題