3

Java プログラミング言語は初めてです。過去 2 年間、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 に答える