相交类型的类型是什么?

考虑下面的代码,它使用Java 8中添加的相交类型的能力:

private <E, T extends List<E> & RandomAccess> void takeList(T list) {

}

private void fakingRandomAccess() {
    List<Integer> linkedList = new LinkedList<>();
    takeList((List<Integer> & RandomAccess)linkedList);
}

我已经制定了一个takeList方法,它只需要具有(接近)常量访问时间的列表,不管出于何种原因,但我可以想象会出现确实需要这样做的情况。

将一个ArrayList<E>传递给该方法应该很好,但是通过类型相交,您还可以通过假设它具有不变的访问时间来传递LinkedList<E>

现在我的问题是:

  • 有什么方法可以将(List<Integer> & RandomAccess)linkedList在指定类型的对象中?
  • 我可以使用类型交集来简化takeList方法吗?

  • 你正在混合两种不同的东西。

    在如何序列化lambda? 问题和答案有一个lambda表达式被转换为交集类型。

    Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
    

    这告诉编译器生成与交集类型兼容的类型。 因此,为lambda表达式生成的类将是RunnableSerializable


    在这里,您将具体类的实例转换为交点类型:

    (List<Integer> & RandomAccess)linkedList
    

    这要求运行时检查具体实例的类是否实现了适当的类型,即满足所有接口。 这个运行时检查失败,因为LinkedList没有实现RandomAccess

    链接地址: http://www.djcxy.com/p/78513.html

    上一篇: What is the type of an intersected type?

    下一篇: How to implement a simple Markov model to assign authors to anonymous texts?