使用InterfaceType进行对象初始化

时间:2013-08-20 13:58:28

标签: java

我是java编程语言的新手。我在c#中编程了两年。当我浏览java程序时,我找到了如下代码。

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

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

由于

2 个答案:

答案 0 :(得分:6)

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

这也不是Java特有的。例如,像File.OpenReadXmlReader.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...
    }
}

答案 1 :(得分:1)

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

Factory-Method-Pattern (Wikipedia)