2011-11-08 35 views
1

私はしばらくこの問題を探してきました。 abstractSetをインスタンス化できないというエラーが発生し続けます。 これはジェネリックを求め続けます。私はジェネリックを追加しますが、ダイスはまだありません。AbstractSetクラスをインスタンス化できません。

import java.util.AbstractSet; 
import java.util.Set; 
public class UnorderedTree{ 

private Object root; 
private Set subtrees; //Switched to AbstractSet 
private int size; 

public UnorderedTree(Object root){ 
    this(root); 
    subtrees = new AbstractSet(); //ERROR HERE WITH <Object> 
    size=1; 
    } 
} 

任意のポインタは

+0

抽象クラスの唯一の目的は、それを拡張することです。拡張するか、コンクリートの組み込みサブクラスを使用してください。 –

答えて

6

その名前が示唆したように、AbstractSetが抽象的である、あなたはそれをインスタンス化することはできません。そのjavadocは次のように述べています。

このクラスは、このインターフェイスを実装するために必要な作業を最小限に抑えるために、Setインターフェイスの骨格の実装を提供します。

あなたはHashSetのようないくつかの具体的なセットを使用する必要があります。

2

AbstractSetは抽象クラスで役立つだろう。抽象クラスをインスタンス化することはできません。抽象クラスは、一般に、定義している型の完全な実装が含まれていないためです。ジェネリックスとは何の関係もありません。

1

abstractクラスを初期化することはできません。

Java 6 APIこれはAbstractSetクラスの定義です。

public abstract class AbstractSet<E> 
extends AbstractCollection<E> 
implements Set<E> 

詳細については、Java API documentationを参照してください。

あなたが使用することによって、このコンパイルエラーを克服することができます。

private Set<YourObjType> subtrees = new HashSet<YourObjType>(); 
+0

「インスタンス化できません」を意味すると思いますか? –

+0

@MarkRotteveelはい、あなたは正しいです。それはできないはずです –

3

AbstractSetは抽象的な基本クラスであり、をインスタンス化できません。この抽象クラスを拡張するクラスによってオーバーライドされる保護されたコンストラクタを持っています。

詳細についてはjavadocをご覧ください。

このクラスの既知のサブクラスは、ConcurrentSkipListSet、CopyOnWriteArraySet、EnumSet、HashSet、TreeSetです。おそらくこれらのうちの1つに興味があります。

幸運を祈る!

関連する問題