2013-03-15 110 views
0

非泛型方法我有一些非泛型方法重载的特定对象 EX:调用从泛型方法

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

我想写像

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

,并从这个方法方法我可以调用非泛型方法(不使用instanceof操作符;))

+2

你想做什么?这个问题不是很清楚。 – benzonico 2013-03-15 12:16:30

+0

所以你想要一个通用的方法,神奇地了解要调用哪个特定的方法? – 2013-03-15 12:20:41

+0

我认为,如果我正确地理解相当模糊的问题,答案是否定的。如果要处理所有可能传入的对象,那么如果只有一个处理程序适用于所有类型,那么您的方法仍然必须知道它收到的类型。 – Sticks 2013-03-15 12:20:53

回答

1

不,这将是编译时错误。

在类型的方法internalAdd(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);会打电话给你的再次泛型方法,所以你会落得死循环。

0

我想IP4BlockObjectIP4NetworkObject延伸AbstractEntityObject并且你想使用抽象引用在一些重载的方法之间分派? 我是这样的,我不太明白使用泛型方法的目的。为什么你不这样申明这种方法:

boolean internalAdd(AbstractEntityObject object) {} 

然后你需要为给定的对象选择所需的方法。没有使用instance of运算符或者某种派生类的多态方法,例如,作为enum

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