私はこのクラスをscalaで持っています
trait PageComponent {
protected var page:Page = _
protected var pageData:PageData = _
def initialise(page0:Page, pageData0:PageData) {
page = page0
pageData = pageData0
}
}
PageComponentの各サブクラスには、PageおよびPageDataの独自のサブクラスもあります。サブクラスがpageまたはpageDataを呼び出すとき、このために独自のタイプを返すようにします。
私は次のようなものを試しました
trait PageComponent {
type P <: Page
protected var page:P = _
protected var pageData:PageData = _
def initialise(page0:P, pageData0:PageData) {
page = page0
pageData = pageData0
}
}
この種の動作は、サブクラスがページを呼び出し、タイプPを実装することによって定義されたページタイプを取得できるようにします。
ただし、initialiseメソッドを呼び出そうとしていて、Page型のオブジェクトを通過しているところ、このエラーが表示されています。
error: type mismatch;
found : pageInfoToGoTo.page.type (with underlying type com.xxx.gui.Page)
required: pageComponentToGoTo.P
pageComponentToGoTo.initialise(pageInfoToGoTo.page, pageData)
私はここで明らかに間違っていますが、Pは「ページ」であるため、これでうまくいくはずだと思いました。
何か案は?
-----詳細については編集------
私は次のようなものを持っています
class AhoyPage extends Page
object MyPageComponent extends PageComponent {
type P = AhoyPage
}
jwinandyの回答を読んだ後、initialiseメソッドがこのように呼び出されるようにコードを変更しました
pageComponentToGoTo.initialise(pageInfoToGoTo.page.asInstanceOf[pageComponentToGoTo.P], pageData)
そしてそれは今動作します。だから私の質問は答えられたと思います。ありがとう。しかし、そのキャストはあまりいいものではありません。このようなPageInfoのリストがあります
PageInfo(page:Page, ...)
PageInfoが選択されている場合、ページを使用してマップ内のページコンポーネントを検索します。それを行うためのより良い方法があるはずですが、そうでない場合、私はこれに満足しています。