Jeśli mam następujące klasy zdefiniowanej w javascala przesłanianie java metoda klasy, która odwołuje klasa wewnętrzna
public class A
{
protected class B
{
}
protected void method(B b) {...}
}
I chcę dziedziczą z niego Scala i metody obejścia. Ja bym nadzieję, wykonaj następujące czynności:
class C extends A {
override def method(b: B): Unit = {
// ... do something
super.method(b)
}
}
Jednak kompilator Scala nie lubi, gdy robię to w ten sposób daje następujący błąd:
metoda metoda zasłania niczego. Uwaga: super klasy klasy C zawierają następujące, nie końcowe nazwy o nazwie metoda: protected [pakiet ...] metoda def (x $ 1: A # B): Jednostka
Jedyny sposób, w jaki mogę to zrobić jest wykonanie następujących czynności:
class C extends A {
override def method(b: A#B): Unit = {
// ... do something
super.method(b.asInstanceOf[this.B])
}
}
Uważam konieczności zrobić to dość brzydki i zastanawiałem się, czy nie było neater sposób to zrobić?
Dzięki
Des
Problem wydaje się być związany z kompilatorem działającym w środowisku Eclipse. Testowałem go z sbt i działa on zgodnie z oczekiwaniami, tak jak powiedziałeś - w rzeczywistości zmiany, które wprowadziłem w celu kompilacji w ramach Eclipse, nie działają w ramach kompilacji sbt. Zbadam dalej, aby spróbować dowiedzieć się o problemie z zaćmieniem. – user79074
Zgaduję, problem jest z kompilatorem, jak to się dzieje również w ramach Zaćmienie. Odtworzono za pomocą Scala 2.9.2 i Scala 2.10.1. Więc zgłosili błąd w projekcie scala lang. – user79074
[SI-7946] (https://issues.scala-lang.org/browse/SI-7946), dla osób grających w domu. – Hugh