2012-09-10 13 views
5

Myślę, że łatwiej jest pokazać na przykładzie.scala: prevent companion Object from chiding definition of original Class

Powiedzmy mam klasę case Stan, z obiektem Stan towarzysz wykorzystane do zapewnienia alternatywnego konstruktora, tak:

case class Condition(
    field: String, 
    values: List[String]) 
} 

object Condition { 
    def apply(field: String, value: String): Condition = { 
    Condition(field, List(value)) 
    } 
} 

Kiedy zaimportować go z innego pojawia się następujące ostrzeżenie (który ostatecznie okazuje do błędu):

import utils.query.Condition 

[warn] [...]/ConditionBuilder.scala:14: imported `Condition' is permanently hidden by definition of object Condition in package query 
[warn] import utils.query.Condition 
[warn]  ^
[warn] one warning found 

Chcę mieć dostęp do stanu Type, gdy declargin typ zmiennej, a do obiektu towarzysz podczas wykonywania jednej z nich znajduje się metody

Czy jest jakiś sposób osiągnięcia tego i uniknięcia tego ostrzeżenia (oprócz zmiany nazwy obiektu towarzyszącego, oczywiście)?

+0

Którą wersję kompilatora Scala używasz? –

+0

Czy mogę zapytać, czy warunek jest zdefiniowany w zapytaniu pakietowym przez przypadek? W takim przypadku po prostu upuść import i gotowe. –

+0

Używam kompilatora scala, który jest dostarczany w pakiecie z grą 2.0.3: Witamy w Scala w wersji 2.9.1.final (Java HotSpot (TM) 64-bitowa maszyna wirtualna, Java 1.7.0_06). – opensas

Odpowiedz

2

tak daleko teraz, obejście znalazłem importuje tak:

import utils.query 

[...] 

val myCondition: query.Condition 

i ostrzeżenia nie ma, ale myślę, że nie powinno być lepszym rozwiązaniem ...

1

Co można opisać ISN tak działa (lub podać kompletną próbkę).

To brzmi jak nieaktualne środowisko kompilacji. Czy obiekty pakietu były zaangażowane w jakimś punkcie? Wykonaj czystą kompilację, zrestartuj kompilator rezydentny i zadzwoń do nas rano.

Przykładowo import punkt importu str. {X => y} jego nazwy termname p.x do Y termname i nazwa typu p.x do nazwa typu y. (SLS 4,7)

Ale istnieje duża komentarz w kodzie wokół skrzyżowania klas przypadków i ich towarzyszy, który zawiera ten top-ten komentarz Fun:

// What exactly this implies and whether this is a sensible way to 
// enforce it, I don't know. 

Nie mówię komentarz ma jakiekolwiek znaczenie dla twojej sprawy, ale to świetna linia.

0

miałem główną klasę o nazwie Server a ja stworzenie serwera molo w głównej klasy w następujący sposób:

 import org.eclipse.jetty.server.Server 

    var server:Server=new Server() 

Dostałem poniżej ostrzegają na prowadzeniu sbt run

[warn] /home/xxx/xxx/xxx/src/main/scala/com/xxx/xxx/main/Server.scala:3: imported `Server' is permanently hidden by definition of object Server in package main 
    [warn] import org.eclipse.jetty.server.Server 
    [warn]        ^
    [warn] one warning found 

Zmieniłem nazwę mojej głównej klasy i ostrzeżenie zniknęło.

Powiązane problemy