在泛型类中扩展接口时的NoSuchFieldError

时间:2014-07-01 14:19:45

标签: java generics types interface

我有一个ArtistEntityBean扩展GenericEntityBean

的bean
public class ArtistEntityBean extends GenericEntityBean<Artist> {

    public ArtistEntityBean() {
        item = new Artist();
    }

}

-

public abstract class GenericEntityBean<T extends IntEntity> implements Serializable {

    protected T item;

    public void init(Integer id){
        item.setId(id);
    }
}

-

public class Artist extends ArtistBaseEntity implements Comparable<Artist> {

...

}

-

public abstract class ArtistBaseEntity implements IntEntity {

...

}

-

public interface IntEntity {

    Integer getId();

    void setId(Integer id);
}

-

我试图在GenericEntityBean类中添加尽可能多的代码,这就是为什么我想使用接口以便能够设置id的{ {1}}。

这不是很难,因为我在item的构造函数中得到NoSuchFieldError并且我不知道为什么?

1 个答案:

答案 0 :(得分:3)

如果itempublicprotected或默认您必须使用

super.item = new Artist();

ArtistEntityBean的构造函数中。

如果是private,则必须在抽象类中提供setter方法。


编辑:如果您未在摘要类中指定item,请执行以下操作

public abstract class GenericEntityBean<T extends IntEntity> implements Serializable {

    protected T item;

    public void init(Integer id){
        item.setId(id);
    }
}