Java 获得;“不适用”;泛型类型的编译错误
我有以下课程:Java 获得;“不适用”;泛型类型的编译错误,java,oop,generics,Java,Oop,Generics,我有以下课程: public interface IEntity<T extends IEntity<T>> { T createNewEntity(IEntityCreator creator); } public interface IEntityCreator { <T extends IEntity<T>> T createNewEntity(T source); } public abstract class Entity
public interface IEntity<T extends IEntity<T>>
{
T createNewEntity(IEntityCreator creator);
}
public interface IEntityCreator
{
<T extends IEntity<T>> T createNewEntity(T source);
}
public abstract class EntityBase<T extends EntityBase<T>> implements IEntity<T>
{
@Override
public T createNewEntity(IEntityCreator creator)
{
return creator.createNewEntity(this); //Error here
}
}
公共接口的可扩展性
{
T createNewEntity(IEntityCreator creator);
}
公共接口IEntityCreator
{
T createNewEntity(T source);
}
公共抽象类EntityBase实现了Entity
{
@凌驾
公共T createNewEntity(IEntityCreator creator)
{
返回creator.createNewEntity(this);//此处出错
}
}
我得到以下错误:
“绑定不匹配:IEntityCreator类型的泛型方法createNewEntity(T)不适用于参数(EntityBase)。推断的类型EntityBase不是绑定参数的有效替代品>”
我使用以下代码尝试了不同的方法,但没有成功:
public interface IEntity<T extends IEntity<T>>
{
T createNewEntity(IEntityCreator<T> creator);
}
public interface IEntityCreator<T extends IEntity<T>>
{
T createNewEntity(T source);
}
public abstract class EntityBase<T extends EntityBase<T>> implements IEntity<T>
{
@Override
public T createNewEntity(IEntityCreator<T> creator)
{
return creator.createNewEntity(this); //Error here
}
}
公共接口的可扩展性
{
T createNewEntity(IEntityCreator creator);
}
公共接口IEntityCreator
{
T createNewEntity(T source);
}
公共抽象类EntityBase实现了Entity
{
@凌驾
公共T createNewEntity(IEntityCreator creator)
{
返回creator.createNewEntity(this);//此处出错
}
}
这次编译器说:
“类型IEntityCreator中的方法createNewEntity(T)不适用于参数(EntityBase)”
这个错误的原因是什么?我怎样才能纠正它
谢谢这里有很好的额外模式,但这会编译
public interface IEntity<T extends EntityBase<T>>
{
T createNewEntity(IEntityCreator<T> creator);
}
public interface IEntityCreator<T extends EntityBase<T>>
{
T createNewEntity(EntityBase<T> entityBase);
}
public abstract class EntityBase<T extends EntityBase<T>> implements IEntity<T>
{
@Override
public T createNewEntity(IEntityCreator<T> creator)
{
return creator.createNewEntity(this);
}
}
公共接口的可扩展性
{
T createNewEntity(IEntityCreator creator);
}
公共接口IEntityCreator
{
T createNewEntity(EntityBase EntityBase);
}
公共抽象类EntityBase实现了Entity
{
@凌驾
公共T createNewEntity(IEntityCreator creator)
{
返回creator.createNewEntity(此);
}
}
错误的原因是IEntityCreator.createNewEntity()
需要一个实现IEntity
的T
,而您正在传递EntityBase
,因此它应该实现IEntity
,而它不这样做
您需要显式地将this
强制转换为T
(一个从EntityBase
派生的类,它实际上实现了IEntity
),就像Wundwin Born在注释中建议的那样:
public T createNewEntity(IEntityCreator creator) {
return creator.createNewEntity((T)this);
}
你的第一行:公共界面的开放性。在
EntityBase.createNewEntity
声明如何替换为返回creator.createNewEntity((T)this)中,在将T
重设为EntityBase
后,您忘记了一个“>”代码>???