2

エラーについて読んだnon-static variable this cannot be referenced from a static contextのですが、なぜ私の場合(行return new CommandParser1(command);)でエラーが発生するのかわかりません。クラスのインスタンスを作成するだけです。それで全部です。何が問題ですか?

public class ProtocolUtility {

    public static CommandParser createParser(String command) throws Exception {           
        switch (command) {
            case COMMAND_1:
                return new CommandParser1(command);                  
            case COMMAND_2:
               return new CommandParser2(command);
            default:
                return null;
        }
    }

   public abstract class CommandParser {

       protected String command;

       public String getCommand() {
          return command;
       }       
   }

   public  class CommandParser1 extends CommandParser {       
       public CommandParser1 (String command){
           //...
       }       
   }

   public  class CommandParser2 extends CommandParser {      
       public CommandParser2 (String command)  {
           //...
       }      
   }

}

4

4 に答える 4

3

CommandParser内部クラスです。つまり、外部クラス(ProtocolUtility)のインスタンスを作成する必要があります。その宣言を次のように変更します。

public static abstract class CommandParser {

CommandParserまたは、別のファイルで宣言し.javaます。

この場合、現在存在しているインスタンスが外部インスタンスとして使用される場合とcreateParser()は異なり、コードも機能します。staticProtocolUtility

于 2012-08-14T16:42:24.247 に答える
1

が静的な方法で呼び出された場合createParser(つまり、ProtocolUtility.createParser(...))、内部で定義されたクラスからオブジェクトをインスタンス化することはできませんProtocolUtility。そのため、そのクラスのインスタンスが必要になります(これはありません)。これは、内部クラスも作成することで修正できますstatic

于 2012-08-14T16:42:08.287 に答える
0

CommandParser1()は静的ではないためです。CommandParser1()を呼び出すか、静的として定義するには、CommandParser1のインスタンスが必要です。

于 2012-08-14T16:43:12.533 に答える
0

1. Static method アクセスできませNon-static method or variable.

静的メソッド内にコードreturn new CommandParser1(command); があるため、エラーが発生します。 public static CommandParser createParser(String command)

2.そして、そこからアクセスしようとしているので、今行って いるCommandParser1(command)ように直接アクセスできます。ただし、外部からアクセス しようとしている場合は、作成する必要があります。この内部クラスメソッドにアクセスするための外部クラスインスタンス。inner classclass ProtocolUtility outer classProtocolUtility class

于 2012-08-14T16:43:14.707 に答える