Несовместимость Scala-Java, ссылающаяся на статические поля в классе с тем же именем, что и статический внутренний класс - PullRequest
2 голосов
/ 29 апреля 2011

Взять этот класс Java:

public class Fisk {

    public static class A {
    }

    public static A A = new A();
}

Этот код Java работает:

    Fisk.A a = new Fisk.A();
    Fisk.A b = Fisk.A;

Но вызов его из Scala:

    val fisk = new Fisk.A()
    val strupp = Fisk.A

приводит к компиляторуошибка:

error: ambiguous reference to overloaded definition,
[INFO] both variable A in object Fisk of type Fisk.A
[INFO] and  object A in object Fisk of type object Fisk.A
[INFO] match expected type ?
[INFO]          val strupp = Fisk.A
[INFO]                                   ^
[ERROR] one error found

Кто-нибудь знает способ обойти это, или я должен переименовать мое статическое поле?

- Андреас

Ответы [ 2 ]

1 голос
/ 29 апреля 2011
scala> Fisk.A
<console>:8: error: ambiguous reference to overloaded definition,
both variable A in object Fisk of type Fisk.A
and  object A in object Fisk of type object Fisk.A
match expected type ?
       Fisk.A
            ^
// this is the static field A of Fisk
scala> Fisk.A: Fisk.A
res1: Fisk.A = Fisk$A@d86c58

// this is a new constructed instance of type Fisk.A
scala> val fisk = new Fisk.A()
fisk: Fisk.A = Fisk$A@462f90

// this is the static field A of Fisk (see the same hashcode)
scala> val strupp: Fisk.A = Fisk.A
strupp: Fisk.A = Fisk$A@d86c58
0 голосов
/ 06 мая 2011
...