と の 2 つのfinal
クラスがScanner
ありCsvReader
ます。
フィールドが必要です: Scanner インスタンスまたはCsvReader インスタンスprivate MyInterface scan;
、およびそれらのタイプのみを受け取ることができます。
MyInterface のビルド方法
と の 2 つのfinal
クラスがScanner
ありCsvReader
ます。
フィールドが必要です: Scanner インスタンスまたはCsvReader インスタンスprivate MyInterface scan;
、およびそれらのタイプのみを受け取ることができます。
MyInterface のビルド方法
これに対する最善の解決策は、スキャナーまたは 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
implementationの両方が必要ですMyInterface
。
次に、共有MyInterface
するすべてのメソッドを含めることでビルドできます-たとえば、メソッドを言います。Scanner
CsvReader
read
これで、次のように記述できます。
MyInterface scan1 = new Scanner();
MyInterface scan2 = new CsvReader();
scan1.read();
scan2.read();