我想知道是否存在一个库来执行一堆平凡的转换(基本上是一堆可能不安全的转换的包装,在大多数情况下,这实际上不是问题)。例如,假设我在一个库中有以下内容(为了简洁起见,省略了此内容):
public interface LibraryInterface;
public static void doSomething(Collection<LibraryInterface> collection);
因此,
doSomething()
固执地只采取了比可能的灵活的方式(即Collection<? extends LibraryInterface>
。是否有一个提供如下功能的库:public static <T, U extends T> Collection<T> cast(Collection<U> collection);
这样,如果我有一个实现
LibraryInterface
的类,并且我有一个List<MyLibraryInterfaceImpl>
,我仍然可以通过强制转换该列表来使用doSomething()
吗? (cast()
的主体隐含了不安全的演员表,但是至少从用户的角度来看,演员表被隐藏或集中在一个地方)。(也很不错,它对诸如Comparator之类的东西执行相反的操作)
最佳答案
这样的图书馆将是无稽之谈。由于类型擦除,强制类型转换为父类绝对没有任何作用,只是删除了编译器警告。此外,库将要做的是直接执行强制转换或复制馆藏。换句话说,它要么确实执行了您不想做的事情,并且促使您使用此库,要么实际上是效率低下且无用的东西。
如果要在执行不安全的转换之前检查集合的内容,则向下转换更为有意义。您可以创建一个遍历集合的函数,以检查所有元素的类型,然后通过执行不安全的强制转换返回集合。您可以在〜3行中写此函数;)。