3

我是 java 编程语言的新手。过去两年我一直在用 c# 编程。当我通过 java 程序时,我发现代码如下。

ArgumentParser parser = ArgumentParsers.newArgumentParser("text");

其中 ArgumentParser 是一个 InterfaceType 而 ArgumentParsers 是一个类。但是我在 ArgumentParsers 中找不到 ArgumentParser 的任何实现。我们如何通过使用不实现该接口的类初始化对象来创建接口类型的对象。我不知道这在c#中是否可行。请帮我解释一下

谢谢

4

2 回答 2

6

你只是在ArgumentParsers类中调用一个静态方法。您应该查看实现ArgumentParsers.newArgumentParser以查看使用了哪个实现ArgumentParser

这也不是 Java 特有的。例如,类似File.OpenRead和的方法XmlReader.Create都使用抽象类的返回类型声明——同样的事情也适用于接口。

例如,如果您想将 Java 代码翻译成 C#,这将是有效的:

public interface IArgumentParser
{
    Configuration Parse(string[] arguments);
}

public static class ArgumentParsers
{
    public static IArgumentParser(string file)
    {
        return new FileArgumentParser(file);
    }
}

internal class FileArgumentParser : IArgumentParser
{
    private readonly string file;

    internal FileArgumentParser(string file)
    {
        this.file = file;
    }

    public Configuration Parse(string[] arguments)
    {
        // Presumably use the file somewhere...
    }
}
于 2013-08-20T14:00:04.663 回答
1

ArgumentParsers只是一个工厂,newArgumentParser(String)是一个静态方法,它返回一个类的实例,该实例的实现ArgumentParser可能取决于您传递的字符串参数。

工厂方法模式(维基百科)

于 2013-08-20T14:00:32.950 回答