我有两个final
班:Scanner
和CsvReader
。
我想要一个字段:private MyInterface scan;
能够接收Scanner 实例或CsvReader 实例,并且只有那些类型。
如何构建MyInterface?
我有两个final
班:Scanner
和CsvReader
。
我想要一个字段:private MyInterface scan;
能够接收Scanner 实例或CsvReader 实例,并且只有那些类型。
如何构建MyInterface?
最好的解决方案是提供工厂方法,这些方法采用 Scanner 或 CsvReader 并创建匿名类,将行为委托给它们。
interface MyInterface {
void read();
}
public class TestClass {
class CsvReader {
public void read() {
System.out.println("CSV reader is reading");
}
}
class Scanner {
public void read() {
System.out.println("Scanner is reading");
}
}
public static MyInterface newInstance(final CsvReader reader) {
return new MyInterface() {
@Override
public void read() {
reader.read();
}
};
}
public static MyInterface newInstance(final Scanner scanner){
return new MyInterface() {
@Override
public void read() {
scanner.read();
}
};
}
}
您需要同时拥有Scanner
并CsvReader
实施MyInterface
.
然后你可以MyInterface
通过包含所有方法来构建Scanner
并CsvReader
共享 - 例如一个read
方法。
现在你可以写:
MyInterface scan1 = new Scanner();
MyInterface scan2 = new CsvReader();
scan1.read();
scan2.read();