在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>
等名称的不同界面?
答案 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
参数有效在实现和调用者中都被忽略了。
Func1
和Func0
的实例仍然是Func
的实例。