Java泛型、扩展泛型和抽象类

Java泛型、扩展泛型和抽象类,java,generics,inheritance,abstract,Java,Generics,Inheritance,Abstract,我已经设置了以下课程: public abstract class Process<T,S> { ... } public abstract class Resource<T, S extends Process<T, S>> { protected S processer; ... } public class ProcessImpl<EventType1, EventType2> { ... } publi

我已经设置了以下课程:

public abstract class Process<T,S> {
    ...
}

public abstract class Resource<T, S extends Process<T, S>> {
    protected S processer;
    ...
}

public class ProcessImpl<EventType1, EventType2> {
    ...
}

public class ResourceImpl extends Resource<EventType1, ProcessImpl> {
    processer = new ProcesserImpl();
    ...
}
公共抽象类进程{
...
}
公共抽象类资源{
受保护的S处理器;
...
}
公共类ProcessImpl{
...
}
公共类ResourceImpl扩展了资源{
processer=新的ProcesserImpl();
...
}
在我到达
ResourceImpl
之前,一切都很好。我被告知,
ProcessImpl
不是
Resource
类型的有界参数
的有效替代品

我试过各种方法来解决这个问题,并不断碰壁

有人有什么想法吗?

公共类ProcessImpl{
public class ProcessImpl<EventType1, EventType2> {
...
}
... }

因为ProcessImpl不扩展进程。您的ProcessImpl不是从Process派生的,这正是您声明的参数应该是的。

我看不到编辑原始版本的方法,也看不到在没有更好的代表的情况下对给定答案进行评论的方法

此代码将存在于web层上,eventtype2在持久层上定义,并且仅可在该级别下的核心层中访问


因此,不幸的是,如果没有紧耦合(我希望避免),我无法访问EventType2。

您可能希望执行以下操作:

public abstract class Process<T, S> {
}

public abstract class Resource<T, S extends Process<T, S>> {
    S processor;

}

public class ProcessImpl extends Process<EventType1, ProcessImpl> {
}

public class ResourceImpl extends Resource<EventType1, ProcessImpl> {

}
公共抽象类进程{
}
公共抽象类资源{
S处理器;
}
公共类ProcessImpl扩展了进程{
}
公共类ResourceImpl扩展了资源{
}

如果将
资源的
S
参数约束为处理器,则还需要在
ProcessImpl
类中正确声明它。我不知道什么是
EventType2
,但它应该实现流程接口。我假设你真的想说
ProcessImpl

如果您不希望代码依赖于某个包含
过程的现有包,您还可以引入一些新的接口包,而不依赖于类层次结构最底层的任何内容。(当然,如果您能够更改继承的约束。)

我不明白。您是否无法使ProcessImpl从进程扩展?