0

リスト内のオブジェクトをインスタンス化する方法(例:

私はファイルでbeginを検索するのが好きです。見つかった場合は、その後にコードをストアに追加します。これが例です

public abstract class Structure 
{   
    private List<Structure> structureList = new ArrayList<Structure>();

    protected void setStructure(Filemanager file, String line)
    {
    /*
     * set all values at the object structure
     */
    line = file.getSourceLine();

    while (!line.contains("END_"))
    {
                    if (line.contains("TRANSLATE"))
                    {

                    }
                    else if (line.contains("BEGIN_OBJECT"))
                    {
                        structureList.add(new FunctionalStructure(line));
                    }
                    else 
                    {
                        setValue(line);
                    }
                    line = file.getSourceLine();
            }
    }

    protected abstract void setValue(String line);  
}

public abstract class FunctionalStructure extends Structure 
{ 
    private String name;
    public FunctionalStructure(String line) 
    { 
        super();
        this.name = line.substring(line.indexOf("\"")+1, line.lastIndexOf("\"")); 
    } 
    public String getName() 
    { 
        return this.name; 
    } 
    public List<Structure> Startfunctional() 
    { 
        return null;
    } 
    protected abstract void setValue(String line); 
}

structureList.add(new FunctionalStructure(line));のインスタンス化に問題があります。

誰かが上の行の何が悪いのか教えてもらえますか

4

2 に答える 2

1

FunctionalStructureそれは抽象クラスでなければならないと思います(おそらく拡張しますStructure)。抽象クラスをインスタンス化することはできません。

これが、次のようなエラーが発生する理由です。

Cannot instantiate the type FunctionalStructure

FunctionalStructure クラスを作成した場合、誤って抽象としてマークした可能性があります。setValue(String) メソッドを実装すると仮定すると、クラス宣言から抽象修飾子を削除できます。

FunctionalStructureまたは、使用している API で拡張する適切な具象クラスを使用します。

または、匿名の内部クラスを使用します。

structureList.add(new FunctionalStructure(line){
    public void setValue(String value) {
        // your implementation here
    }
});
于 2012-06-26T14:51:32.433 に答える
0

概念を理解するのに役立つ以下の例を見つけることができます:-

package pack;

public class Demo {

    public static void main(String[] args) {

        MyGeneric<A> obj = new MyGeneric<A>() ;


        //obj.add(new C()) ; //don't compile
        obj.testMethod(new A()) ; //fine
        obj.testMethod(new B()) ; //fine
    }
}

class A{}

class C{}

class B extends A{}

class MyGeneric<T>{

    public void testMethod(T t) {

    }
}

編集:したがって、コードを正常にコンパイルするには、Structure と FunctionalStructureの間に IS-A 関係が必要です。

于 2012-06-26T14:57:06.613 に答える