Jaki jest odpowiednik Java tych cech w Scali?Jaki jest odpowiednik Java tego kodu Scala?
trait Visitor {
type X
type S<:Strategy
type R[v<:Visitor] = (S{type X = Visitor.this.X;type V=v})#Y
}
trait Strategy {
type V<:Visitor
type X
type Y
}
I przetłumaczyć Strategy
cechę do:
public interface Strategy<V extends Visitor<?, ?, ?>, X, Y> {
}
Staram tłumacząc cechę Visitor
do:
public interface Visitor<X, S extends Strategy<?,?, ?>, R ?????> {
}
Jak widać, nie wiem, jak rozumieć/przetłumaczyć typ R
w funkcji Visitor
. Jaki jest podobny odpowiednik Java?
Może moglibyśmy zdefiniować trzeci "interfejs R <.....>" i użyć go w generatorze odwiedzającego? – Stuck
Wątpię, że byłaby to zupełnie inna klasa niż wtedy. Powyższy fragment kodu w Scali nie produkuje nic oprócz 'Visitor' i' Strategy'. Również nie sądzę, że możliwe jest kodowanie wartości domyślnych dla członków typu abstrakcyjnego (może coś działałoby w oparciu o specjalizację częściowych generics, np. 'Interfejs A {}, interfejs B rozszerza A {}', ale wątpię w to także). Tak czy inaczej, system typu Java nie jest wystarczająco silny, by wyrazić te koncepcje. –