我有一个非常通用的重载类,我在其中测试问题的不同方法,并且该类在很多不同的地方使用,并且每次更改类型参数的数量时,我都必须在所有使用该类型的地方修复错误,即使在我不使用该类通用性
public class HeavyGen<TYPE1, TYPE2, TYPE3, ETC>{...}
//now anywhere else i have to do either this and refactor my code at each
//change in the number of type parameters
public HeavyGen<?,?,?,?> func(){...}
//or this but @SupressWarning seem like a dirty fix
@SupressWarning
public HeavyGen func(){...}
所以:是否有一种方法可以更改HeavyGen
的类型参数的数量,而不必在不使用泛型的地方重构代码?
我的想法:
使用将““封装”“”类型参数的类类型,例如TypeBag<TYPE1,TYPE2,TYPE3,ETC>
ans然后使用Container<BAG extends TypeBag>
,但似乎不起作用
由于这些类型参数主要在类内部使用,因此请对方法类型参数进行一些技巧以将它们传递给周围。到目前为止,我也没有设法使其正常工作。
具有嵌套的类继承系统(例如<CHILD extends Container> CHILD.Inner
),但Java似乎也不喜欢(我想得越多,我越愿意能够做到这一点:D )
答案 0 :(得分:2)
您可以简单地将Container<...>
重命名为AbstractContainer<...>
并从中提取非通用的Container
接口:
public interface Container {
// put non-generic methods here
}
public abstract class AbstractContainer<...> implements Container {
// put generic methods here
}
现在,客户端代码可以使用Container
而不携带泛型,并且实现可以扩展AbstractContainer<...>
并且仍然可以使用/实现泛型方法。