隐藏作为实现细节的类型参数

时间:2018-11-26 14:07:02

标签: java type-parameter information-hiding

我有一个类,其中有些类型参数不是实现细节,而有些则不是。

处理类型参数(最好不使用未经检查的强制转换)不应属于公共API的最佳方法是什么?

我有一个由构建者创建的类,该构建者选择了合适的助手。就我而言,一个助手知道如何在类似缓冲区的对象之间进行批量读取/写入。

/**
 * @param <T> a type parameter that end users of PublicClass cannot ignore.
 * @param <X> has a specific relationship to T, but
 *     is an artifact of how PublicClass is implemented.
 */
public class PublicClass<T> {
  // This constructor is called from a builder.
  // The builder just returns
  //     new PublicClass<>(aHelper, someMutableState)
  // <X> is inferred from the choice of parameters.      
  <X> PublicClass(
      Helper<T, X> helper,
      StatefulInternalObject<T, X> someMutableState) {
    ...
  }

  ...
}

因此有一个公共类和一个公共生成器,以及一些私有的实现细节类。

我不想向客户展示<X>,但是我的助手和有状态对象需要以依赖于<X>的方式进行交互,并且助手会转换使用{{1}的类型}转换为使用<T>的类型,因此使用涉及<X>的未经检查的强制类型转换会使PublicClass的实现变得脆弱。

我可以创建另一个具有两个类型参数集的隐藏类,然后将我的公共API转发给该类:

<X>

有没有更好的方法不需要这些浅层转发方法?

0 个答案:

没有答案