在Java中定义具有相同名称但不同数量的类型参数的通用接口

时间:2014-08-02 09:19:37

标签: java generics interface java-7 func

在Java(1.7)中,是否可以定义多个具有相同名称但具有不同数量类型参数的接口?我本质上寻找的内容与.NET的Func<TResult>Func<T1, TResult>Func<T1, T2, TResult>Func<T..., TResult>委托类型类似。非常类似于可选类型参数

在Java语言中存在这样的功能,还是仅限于创建具有Func0<TResult>Func1<T1, TResult>Func2<T1, T2, TResult>等名称的不同界面?

2 个答案:

答案 0 :(得分:3)

泛型类型是编译时功能,这意味着在运行时,您的Func类将是同一个类。即使您单独编译它们并将它们添加到类路径中,也只会加载一个。这意味着它们必须具有不同的完整类名才能在运行时使用。

答案 1 :(得分:1)

您不能拥有可变数量的泛型类型参数,但可以使用Void类型“强制”忽略参数:

interface Func<T1, T2, IReault> {...}
interface Func1<T1, IResult> extends Func<T1, Void, IResult> {...}
interface Func0<IResult> extends Func<Void, Void, IResult> {...}

Void无法实例化,因此您可以传递/返回/使用的唯一有效Void引用为null,从而强制Void参数有效在实现和调用者中都被忽略了。

Func1Func0的实例仍然是Func的实例。