从泛型方法调用非泛型方法

时间:2013-03-15 12:14:56

标签: java generics

我有一些非泛型方法可以为特定对象重载 EX:

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

我想写一个像

这样的方法
protected <T extends AbstractEntityObject>boolean internalAdd(T t) {}

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

2 个答案:

答案 0 :(得分:1)

不会是编译时错误。

  

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

因为你的类型方法:

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

对于protected <T extends AbstractEntityObject>boolean internalAdd(T t) {},您将获得t作为T的类型。所以如果你打电话:

internalAdd(t);

这会给你编译时错误,因为internalAdd()只期望IP4BlockObjectIP4NetworkObject

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

答案 1 :(得分:0)

我认为IP4BlockObjectIP4NetworkObject扩展AbstractEntityObject并且您希望使用抽象引用在一些重载方法之间进行调度? 我是这样,我真的不明白使用泛型方法的目的。你为什么不这样说这个方法:

boolean internalAdd(AbstractEntityObject object) {}

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

如果你想逃避这一点,你可以通过用一些接口调用它们的多态方法来重写代码并允许派生类自己选择所需的方法。但这真的值得吗?