0

我有两个final班:ScannerCsvReader

我想要一个字段:private MyInterface scan;能够接收Scanner 实例CsvReader 实例,并且只有那些类型。

如何构建MyInterface

4

2 回答 2

1

最好的解决方案是提供工厂方法,这些方法采用 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();
            }
        };
    }
}
于 2012-07-18T09:17:14.480 回答
1

您需要同时拥有ScannerCsvReader实施MyInterface.

然后你可以MyInterface通过包含所有方法来构建ScannerCsvReader共享 - 例如一个read方法。

现在你可以写:

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

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