0

我如何实例化列表中的对象,例如

我喜欢在文件中搜索开始,如果找到,则在其后添加存储代码。这是示例

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一定是一个抽象类(大概是 extends Structure)。您不能实例化抽象类。

这就是为什么您会收到如下错误:

Cannot instantiate the type FunctionalStructure

如果您创建了 FunctionalStructure 类,也许您不小心将其标记为抽象的。假设它实现了 setValue(String) 方法,您可以从类声明中删除 abstract 修饰符。

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) {

    }
}

编辑:因此,结构和功能结构之间必须存在 IS-A 关系才能成功编译代码。

于 2012-06-26T14:57:06.613 回答