Java 一个参数的通用接口实际上有两个
Java generic interface with one parameter has actually two
我最近发现 java 代码与此类似:
public interface DemoInterface<T> extends Serializable
{
<V> void demoMethod(Collection<V> someValues, SomeType<V, T> moreValues);
}
因为我已经阅读了一些关于接口的建议,但从未发现过这样的情况,所以我在这里问:接口声明只提到了 <T>
。 <V>
是什么意思?
如果您知道答案,请耐心并举例说明如何使用此接口以及接口和演示方法的实现。
谢谢。
V
是一个额外的泛型类型参数,仅适用于 demoMethod
,不像 T
适用于此接口的所有方法。
我只是举个例子:
DemoInterface<Type> demo = new DemoInterface<>() {
<V> void demoMethod(Collection<V> someValues, SomeType<V, Type> moreValues) {
Type type = new Type();
foreach(V value: someValues) {
Type subtype = moreValues.doSomething(value);
type.concat(subtype);
}
System.out.printf("result: %s%n", type);
}
};
SomeType<ValueA, Type> someA = new SomeType<>();
SomeType<ValueB, Type> someB = new SomeType<>();
List<ValueA> listA = new Arraylist<>(); // add some elements
List<ValueB> listA = new Arraylist<>(); // add some elements
demo.demoMethod(listA, someA);
demo.demoMethod(listB, someB);
我最近发现 java 代码与此类似:
public interface DemoInterface<T> extends Serializable
{
<V> void demoMethod(Collection<V> someValues, SomeType<V, T> moreValues);
}
因为我已经阅读了一些关于接口的建议,但从未发现过这样的情况,所以我在这里问:接口声明只提到了 <T>
。 <V>
是什么意思?
如果您知道答案,请耐心并举例说明如何使用此接口以及接口和演示方法的实现。
谢谢。
V
是一个额外的泛型类型参数,仅适用于 demoMethod
,不像 T
适用于此接口的所有方法。
我只是举个例子:
DemoInterface<Type> demo = new DemoInterface<>() {
<V> void demoMethod(Collection<V> someValues, SomeType<V, Type> moreValues) {
Type type = new Type();
foreach(V value: someValues) {
Type subtype = moreValues.doSomething(value);
type.concat(subtype);
}
System.out.printf("result: %s%n", type);
}
};
SomeType<ValueA, Type> someA = new SomeType<>();
SomeType<ValueB, Type> someB = new SomeType<>();
List<ValueA> listA = new Arraylist<>(); // add some elements
List<ValueB> listA = new Arraylist<>(); // add some elements
demo.demoMethod(listA, someA);
demo.demoMethod(listB, someB);