【问题标题】:Is there a way to reduce multiple type parameters?有没有办法减少多个类型参数?
【发布时间】:2019-12-11 10:21:43
【问题描述】:

我有一个非常通用的重型类,我正在测试不同的解决问题的方法,并且这个类在很多不同的地方使用,每次我更改类型参数的数量时,我都必须在我使用该类型的任何地方修复错误,即使在哪里我不使用该类通用性

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&lt;TYPE1,TYPE2,TYPE3,ETC&gt; ans 然后使用Container&lt;BAG extends TypeBag&gt;,但它似乎不起作用

  • 由于这些类型参数主要在类中使用,因此可以对方法类型参数进行一些技巧来传递它们。到目前为止我也没有成功。

  • 1234563 /p>

【问题讨论】:

  • 如何保持 Container<...> 中类型参数的数量受到限制/控制? (aka no mass refactoring later) -> 请解释一下你所说的大规模重构是什么意思,你是什么意思in control,通过代码控制它们还是简单地通过javadoc等?跨度>
  • @LinosaysReinstateMonica 我的意思是,如果我需要更改 Container 的类型参数,在任何我使用 Container 类型的地方(例如,对于函数返回或参数,不需要这些类型)我都会有更改该函数的代码以通过控制来修复它的类型参数,我的意思是我不必这样做
  • 好吧,你不会对社区反对它感到惊讶。你的描述太乱了,真的无法理解你想要什么。 要么描述你的非常原始的问题(没有花哨的东西,也许这是一个xy问题),或者提取 非常技术核心 您的问题,并使其尽可能简单。现在您谈论的事情太多了,但是在非常详细的技术层面上。整个混乱是不可能理解的。
  • @HonzaZidek 哦,我明白你的意思了。我编辑了我的问题,希望现在更好
  • 您的最后一次编辑很好

标签: java generics lambda


【解决方案1】:

您可以简单地将您的 Container&lt;...&gt; 重命名为 AbstractContainer&lt;...&gt; 并从中提取非通用 Container 接口:

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

现在客户端代码可以使用 Container 而无需携带泛型,并且实现可以扩展 AbstractContainer&lt;...&gt; 并且仍然能够使用/实现泛型方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-27
    • 2011-11-23
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多