有没有一种方法可以减少多个类型参数?

3

我有一个非常通用的重型类,我正在测试不同方法来解决问题,并且这个类在许多不同的地方使用,每次我改变类型参数的数量,我都必须在使用类型的每个地方修复错误,即使我不使用该类的泛型。

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>,然后使用Container<BAG extends TypeBag>,但似乎不起作用

  • 由于这些类型参数大多在类内部使用,所以可以通过方法类型参数的技巧来传递它们。到目前为止,我还没有成功地使其工作。

  • 拥有一个嵌套的类继承系统(类似于<CHILD extends Container> CHILD.Inner),但Java似乎也不喜欢它(我越想越希望能够做到这一点:D)


如何控制Container<...>中类型参数的数量,以避免后期大规模重构?(也就是说,没有大规模重构)-> 请解释一下您所说的大规模重构是什么意思,以及您所说的“控制”,是通过代码还是简单地通过javadoc等方式来控制它们? - Lino
@LinosaysReinstateMonica 我的意思是,如果我需要更改 Container 的类型参数,那么我在使用 Container 类型的任何地方(例如函数返回或参数,而不需要特定的类型)都必须更改该函数的代码以修复其类型参数。所谓的控制,就是我不必这样做。 - R.L
1
嗯,你不能对社区的投票结果感到惊讶。你的描述太混乱了,真的很难理解你想要什么。要么清楚地描述你的非常原始的问题(不要使用花哨的东西,也许这是一个X-Y问题),要么提取出你问题的非常技术核心,并尽可能简化它。现在你谈论的事情太多了,而且还涉及到非常详细的技术层面。整个混乱是无法理解的。 - Honza Zidek
2
@HonzaZidek 哦,我明白你的意思了。我编辑了我的问题,希望现在更好了。 - R.L
1
你的最后一次编辑很 - Honza Zidek
1个回答

2
您可以将您的Container<...>简单地重命名为AbstractContainer<...>,并从中提取一个非泛型的Container接口:
public interface Container {
    // put non-generic methods here
}

public abstract class AbstractContainer<...> implements Container {
    // put generic methods here
}

现在客户端代码可以使用Container,无需关注泛型,实现可以扩展AbstractContainer<...>并仍能使用/实现泛型方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接