14

次の例は、Javaフォーラムの1つで見つかりました。

interface employee{
    class Role{
          public String rollname;
          public int roleId;
          public Object person;
     }
    Role getRole();
    // other methods
}

上記のコードスニペットを実行しましたが、正常にコンパイルされています。つまり、インターフェイス内にクラスを含めることができます。

私の質問は、そのようなクラスを持つことの使用は何ですか?デザインパターンはありますか?

4

6 に答える 6

9

このコードスニペットは、すでにあなたの質問に答えています。このクラスは、メソッドのインターフェースRoleによって使用されます。インターフェイスの設計者は、このクラスがインターフェイスと緊密に結合されているため、そのクラスがインターフェイスにとってどれほど重要であるかを強調するために、そのインターフェイス内で定義する価値があると判断しました。employeegetRole()

また、クラスのセマンティック名前空間を提供しますemployee.Role。ただし、他のクラス内で定義された静的クラスは非常に一般的ですが(上記と同じ目的で)、この種の構造を初めて目にします。

于 2012-05-11T14:40:10.410 に答える
4

ここでの使用法は、他の内部クラスの場合と同じです。クラスのスコープをそれが属する場所に制限します。

この場合、実装者はそれがトップレベルのクラスとして適合しないと考え、それをインターフェースRole内に配置しました。employeeこの理由は、の意図がRoleと緊密に結合することである可能性が最も高いですemployee

于 2012-05-11T14:40:47.917 に答える
1

あなたの例にはわずかなコンパイルの問題があります。これは以下で修正しました。

public interface Employee {
class Role{
      public String rollname;
      public int roleId;
      public Object person;
    }

Role getRole();
}

それとは別に、はい、コンパイルします。これは、これを行うことが良い考えであるという意味ではありません。これは、クラスの名前の間隔を広げるためのさらなる方法ですRoleが、かなり醜いと思います。

于 2012-05-11T14:49:32.183 に答える
1

このクラスは、インターフェースの重要な部分を提供します。の戻り値getRole。したがって、インターフェース内でクラスを定義することは理にかなっています。

インターフェイスを実装する際の柔軟性を高めるために、この種のもの(のように)のインターフェイス内にインターフェイスを定義するのが少し一般的ですが、クラスを実行することもできます。Map.Entryjava.util

于 2012-05-11T14:41:30.853 に答える
0

私はそのようなコードを書くことはしませんが、クラスとインターフェースの間の依存関係を強調するために使用されると思います。

APIを定義するためにインターフェースが使用されます。この場合、作成者は「これら2つは離れて生きることができなかった」と言いたかったかもしれません。

お役に立てれば。

于 2012-05-11T14:41:42.500 に答える
0

私はそのようなコードを書くことはしませんが、クラスとインターフェースの間の依存関係を強調するために使用されると思います。

APIを定義するためにインターフェースが使用されます。この場合、作成者は「これら2つは離れて生きることができなかった」と言いたかったかもしれません。

于 2017-03-14T14:36:05.373 に答える