1

requiredフラグや。などのさまざまなプロパティを実装するカスタムスイングコンポーネントのセットを作成していますtabIndex。さまざまなカスタムコンポーネントにデータを入力しようとして、各コンポーネントListに基づいてリストを並べ替えると、問題が発生しtabIndexます。

これを実行しようとしているのは、コンポーネントにIndexed、単一のメソッドを実装するというインターフェイスを実装させることgetIndex()です。次に、myを使用して並べ替えIndexedComparatorます。

私のクラス:

索引付け:

public interface Indexed {
      public int getIndex();
}

IndexedComparator:

public class IndexedComparator implements Comparator<Indexed> {

    @Override
    public int compare(Indexed o1, Indexed o2) {
        return o1.getIndex() - o2.getIndex();
    }

}

WWTextField:

public class WWTextField extends JTextField implements Indexed, FocusListener {
    private boolean required;
    private int tabIndex;

   ...

    @Override
    public int getIndex() {
        return tabIndex;
    }
}

NewJFrame:

public class NewJFrame extends JFrame {
    List<? extends Component & Indexed> list = new ArrayList<>();
    IndexedFocusTraversalPolicy policy = new IndexedFocusTraversalPolicy();

    public NewJFrame() {
        initComponents();

        list.add(wWTextField1);
        list.add(wWTextField2);
        list.add(wWTextField3);
        list.add(wWTextField4);
        list.add(wWTextField5);
        list.add(wWFormatedTextField1);
        list.add(wWFormatedTextField2);

        Collections.sort(list);
        policy.populateComponents(list);
        this.setFocusTraversalPolicy(policy);
    }
}

編集:実際の質問を投稿するのを忘れました。なぜ私の実装はしないのですか

List<? extends Component & Indexed> list = new ArrayList<>();

仕事?コンパイルしようとすると、次のエラーが発生します。

NewJFrame.java:22: error: > expected  
NewJFrame.java:22: error: ';' expected  
NewJFrame.java:22: error: illegal start of type  
4

2 に答える 2

0

制約は、型パラメーターが宣言されている場所 (つまり、、、) でのみ許可さclass C< T extends I & J > {}interface E< T extends I & J > {}ます< T extends I & J > void f() {}

したがって、交差点の種類に名前を付けるだけです。この非機能は、Java について私を悩ませている多くのことの 1 つです。

NewJFrameでジェネリックになる可能性がありT extends Component & Indexedlistタイプを持つ可能性があると思いますList< T >。場合によっては、型の推論により、クライアント コードが特定の型を指定することを回避できます。

于 2012-09-21T06:31:51.463 に答える
0

Comparatorインスタンスは「自動」ではないため、指定する必要があります。私はあなたが意味すると思います:

Collections.sort(list, new IndexedComparator());
于 2012-09-21T06:16:56.803 に答える