5

我已经设置了以下课程:

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();
    ...
}

一切都很好,直到我到达ResourceImpl. 我被告知这ProcessImpl不是<S extends Process<T,S>>type 的有界参数的有效替代品Resource<T,S>

我已经尝试了各种方法来解决这个问题并继续碰壁。

有没有人有任何想法?

4

4 回答 4

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

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

于 2009-06-07T09:49:23.463 回答
1

你可能想做这样的事情:

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参数约束Resource为处理器,您还需要在ProcessImpl类上正确声明它。我不知道是什么EventType2,但它应该实现 Process 接口。我以为你真的想说ProcessImpl

于 2009-06-07T11:09:37.407 回答
0

如果您不希望您的代码依赖于包含Process. (当然,如果您能够更改继承的约束。)

于 2009-06-07T12:08:28.050 回答
0

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

此代码将存在于 web 层,eventtype2 定义在持久层上,只能在该层以下的核心层中访问。

所以不幸的是,没有我想避免的紧密耦合,我无法访问 EventType2。

于 2009-06-07T09:57:03.557 回答