1

私は2つの密接に結びついたクラスのクラスターを持っています。view説明のために、一方を 、もう一方を と呼びましょうtemplate。はtemplateviewどのように見えるかを示します。基本クラスとview基本templateクラス、およびそれらのペアのサブクラスがいくつかあります。

だから、そのように:

基本クラス

BaseTemplate <-> BaseView

サブクラス

TemplateA <-> ViewA
TemplateB <-> ViewB
TemplateC <-> ViewC
TemplateD <-> ViewD

views (base でさえも)viewはそれぞれtemplate、対応する型の を変数として持っています。たとえば、 で宣言された の変数を、で宣言されたキャストするにはどうすればよいですか? BaseTemplateBaseViewTemplateBViewBBaseTemplateすべてのテンプレート サブクラスに汎用情報を設定するのではなく、変数情報を に設定できるようにしたいと考えています。

4

1 に答える 1

1

ジェネリックを使用してこの問題に対処できるようです。例えば:

public abstract class BaseView<T extends BaseTemplate> {

    private final T template;

    protected BaseView(T template) {
        this.template = template;
    }

    //common view methods operating using T etc.
}

public final class ViewA extends BaseView<TemplateA> {

    public ViewA() {
        super(new TemplateA()); //or wherever templates come from
    }

    // ViewA specific stuff
}
于 2013-04-25T22:39:12.570 に答える