有没有办法减少多个类型的参数?

时间:2019-12-11 10:21:43

标签: java generics lambda

我有一个非常通用的重载类,我在其中测试问题的不同方法,并且该类在很多不同的地方使用,并且每次更改类型参数的数量时,我都必须在所有使用该类型的地方修复错误,即使在我不使用该类通用性

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 )

1 个答案:

答案 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<...>并且仍然可以使用/实现泛型方法。