0

我有一些针对特定对象 EX 重载的非通用方法:

protected boolean internalAdd(IP4BlockObject block) {...}
protected boolean internalAdd(IP4NetworkObject network) {...}

我想写一种方法

protected <T extends AbstractEntityObject>boolean internalAdd(T t) {}

我可以从这个方法调用非泛型方法(不使用 instanceof 运算符;))

4

2 回答 2

1

不,那将是编译时错误。

类型中的方法 internalAdd(IP4BlockObject) 不适用于参数 (T)

因为您的类型方法:

protected boolean internalAdd(IP4BlockObject block) {...}
protected boolean internalAdd(IP4NetworkObject network) {...}

对于你来说,protected <T extends AbstractEntityObject>boolean internalAdd(T t) {}你会得到tT 的类型。所以如果你打电话:

internalAdd(t);

这会给你编译时错误,因为internalAdd()只有 expectIP4BlockObjectIP4NetworkObject.

注意:如果所有这些方法都在同一个类上,那么internalAdd(t);将再次调用您的泛型方法,因此您最终将陷入无限循环。

于 2013-03-15T12:23:19.027 回答
0

我想IP4BlockObjectIP4NetworkObject扩展AbstractEntityObject,你想使用抽象引用在一些重载方法之间分派?我是这样,我真的不明白为此使用通用方法的目的。你为什么不这样声明这个方法:

boolean internalAdd(AbstractEntityObject object) {}

然后您需要为给定对象选择所需的方法。instance of如果不使用运算符或某些多态方法给出派生类的类型,则没有直接的方法可以做到这一点,例如。作为enum.

如果您想摆脱这种情况,您可以重写代码并允许派生类自己选择所需的方法,方法是使用某个接口调用它们的多态方法。但这真的值得吗?

于 2013-03-15T12:46:12.807 回答