在Java泛型中,您可以使用"&"将多个接口指定为类型参数的类型边界.这允许我们例如操纵具有公共接口的不同类型的对象以被均匀地操纵,即使没有用于那些常见接口的父接口.我的问题是,如何使用它?出于什么目的?我可以想象将此功能用于集合,但它是如何创建新界面的?这不能动态使用,也不能用于类型参数.它只是一个语法糖,还是有这个功能的真实用例?
以下是我的Java Generics书籍中的一个示例:
public static <S extends Readable & Closeable,
T extends Appendable & Closeable>
void copy(S source , T target, int size){
//code to copy from source to target
}
Run Code Online (Sandbox Code Playgroud)
上面的方法采用的是同时实现的任何来源Readable和Closeable和同时实现任何目标Appendable和Closeable和拷贝从源到目标.您可能想知道为什么我们无法将其简化为:
public static void copy(Reader source, Writer target, int size)
Run Code Online (Sandbox Code Playgroud)
这确实会承认大多数相同的类,但不是所有类.例如,
PrintStream同时实现了Appendable和Closeable,但不是一个子类Writer.此外,您也不能排除,使用您的代码可能有他或她自己的自定义类,也就是说,实现了一些程序员的可能性Readable和Closeable,但不是的子类Reader.