0

次のことを想像してください。

すべての単語は文字のリストです。ただし、文字自体は存在できず、常に単語の一部である必要があります。

したがって、Word クラスは次のようになります。

class Word extends List<MyCharacter>

MyCharacterでは、の一部ではないをインスタンス化できないようにするにはどうすればよいWordでしょうか。MyCharacterのプライベート内部クラスを作成して、のようなWordメソッドを追加することはできますか? しかし、それでは、がのプライベート内部クラスである間に List クラスを拡張することは可能でしょうか?addCharacter(String character)WordWordMyCharacterWord

これに関するヒントをありがとう!

アップデート:

私は今終わった

import java.util.ArrayList;

public final class Word extends ArrayList<Word.MyCharacter> {

    protected final class MyCharacter
    {
        private String character;

        public String getCharacter() {
            return character;
        }

        public MyCharacter(String character)
        {
            this.character=character;
        }
    }

    public void addCharacter(String character) {
        add(new MyCharacter(character));
    }   
}

そして、これがどのように使用されるかです:

public static void main(String[] args) {

    Word word = new Word();

    // word.add(new MyCharacter("a")); // as intended: not possible, because MyCharacter class can't be accessed
    word.addCharacter("a"); // ok           
}
4

2 に答える 2

1

これは、理論的には可能です。1 つの問題は、Character既に Java クラスであるという点で発生します。また、Eclipseを使用している場合は、宣言できません

public class Word extends ArrayList<Letter> {
    private class Letter {
        //...
    }
}

レターをせいぜい保護しない限り。それがEclipseの問題なのか、それともJavaもあなたを止めるのかはわかりません。

スーパークラスの問題に関しては、 List は単なるインターフェイスであるため使用できないためです。ArrayList など、それを実装するものを使用する必要があります。

于 2013-03-29T12:05:24.587 に答える
1

Character を Word の private 内部クラスにして、addCharacter(String character) のようなメソッドを Word に追加することはできますか?

はい。- あるいは、MyCharacterprivate のコンストラクターとMyCharacterclassのみを宣言することもできfinalます。または、「package-private」コンストラクターを持たないMyCharacterクラスを宣言します。Wordまたは、一種の (静的) ファクトリ メソッドとプライベート コンストラクターを内部にMyCharacter持つこともできます。appendToWord( Word w, Character char )または ... :-)

編集:私は最初に質問を誤解しました:

Word にプライベートな内部 Character クラスを使用して List クラスを拡張させることは可能でしょうか?

Wordいくらでも伸ばせList<T>ます。しかし、あなたが理解したように、そうではありませんList<Word.SomeInnerClass>

于 2013-03-29T11:57:09.473 に答える