我有以下接口:依赖
public interface Assembler<T, S> {
S assemble(T val);
}
public interface Slicer<T, V> {
V[] slice(T val);
}
我想有一个汇编程序实例中使用切片器实例,并调用它的切片()。我有以下几点:
public class MyAssembler<T, S> implements Assembler<T, S> {
private final Slicer<T, V> slicer;
//ctor
public MyAssembler() {
slicer = new MySlicer<T, V>();
}
@Override
public S assemble(T val) {
V[] v = mySlicer.slice(val);
}
这不会编译,因为V形不知道(不能被解析为一个类型)在MyAssembler。我无法将汇编器接口更改为Assembler<T, S, V>
。有另一种方法可以定义依赖关系吗?这不是非泛型类的问题。即使使用静态工厂方法来获得切片机的参考,未知V的问题仍然存在。有什么建议么?如果不能这样做,任何人都可以推荐一种不同的方法或设计模式,以允许汇编程序调用切片器的slice()?
您可以为'MyAssembler'声明第三个类型变量。 –
我尝试过使用'MyAssembler'。它会编译,但是一旦尝试实例化,例如:汇编器 asmblr = new MyAssembler ,则编译失败:汇编器类型参数的数量不正确;它不能用参数进行参数化。 –
pjscore10
第三个类型参数对于'MyAssembler'是必需的,而不是声明类型'Assembler'。但在这里看起来并不是很有用,因为你不用'V'做任何事情。 –