0

と の 2 つのfinalクラスがScannerありCsvReaderます。

フィールドが必要です: Scanner インスタンスまたはCsvReader インスタンスprivate MyInterface scan;、およびそれらのタイプのみを受け取ることができます。

MyInterface のビルド方法

4

2 に答える 2

1

これに対する最善の解決策は、スキャナーまたは 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();
            }
        };
    }
}
于 2012-07-18T09:17:14.480 に答える
1

ScannerCsvReaderimplementationの両方が必要ですMyInterface

次に、共有MyInterfaceするすべてのメソッドを含めることでビルドできます-たとえば、メソッドを言います。ScannerCsvReaderread

これで、次のように記述できます。

MyInterface scan1 = new Scanner();
MyInterface scan2 = new CsvReader();

scan1.read();
scan2.read();
于 2012-07-18T09:07:48.073 に答える