我是java编程语言的新手。我在c#中编程了两年。当我浏览java程序时,我找到了如下代码。
ArgumentParser parser = ArgumentParsers.newArgumentParser("text");
其中ArgumentParser是一个InterfaceType而ArgumentParsers是一个类。但我在ArgumentParsers中找不到ArgumentParser的任何实现。我们可以通过使用一个不实现该接口的类来初始化对象来创建一个interfacetype对象。 我不知道c#中有可能。请帮我解释一下
由于
答案 0 :(得分: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...
}
}
答案 1 :(得分:1)
ArgumentParsers
只是一个工厂而newArgumentParser(String)
是一个静态方法,它返回一个实现ArgumentParser
的类的实例,可能取决于你传递的String参数。