Scala Variable von Super-Type

Siassei

Bekanntes Mitglied
Servus,

ich sehe gerade den Wald für lauter Bäume nicht mehr. Hoffe, dass das hier jemand beantworten kann :D

Scala-Version: 2.8.beta

Ich verwende zum Loggen die Bib. log4j und habe ein kleine Java-Helper Bibliothek. Jetzt habe ich z.B. eine eigene Logger-Klasse die von Category erbt. Alles Ordnungsgemäß.

Schreibe ich jetzt in Scala
Java:
val logger:Category = Logger.getLogger
bekomme ich einen Build-Fehler. Formuliere ich es wie folgt, mekert der Compiler nicht.
Java:
val logger:Category = Logger.getLogger.asInstance[Category]

Wieso muss ich das explizit angeben? Achja, das Beispiel entspricht nicht ganz den Anwendungsfall. Eigentlich muss ich den Logger einer Methode übergeben, die eine Category verlangt.

Gruß,
Thomas
 

Siassei

Bekanntes Mitglied
Hmm, also ich liefer mal den Orginal-Code. Ich bin mir nicht sicher wo der Fehler liegt
Java:
// Java
package org.apache.log4j;
...
public class LoggingOutputStream extends OutputStream {
...
  public LoggingOutputStream(Category cat, Priority priority) { ... }
....
}

// In Scala
object ... {
...
  /**
   * Biegt die Consolen-Ausgabe in einem Logger um.
   *
   */
  def transfereConsoleToLogging = {
    var out: OutputStream = new LoggingOutputStream(getLogger("ConsoleStream"), Level.INFO)
    var print: PrintStream = new PrintStream(out, true)
    Console.setOut(print)

    out = new LoggingOutputStream(getLogger("ConsoleStream"), Level.ERROR)
    print = new PrintStream(out, true)
    Console.setErr(print)
    ()
  }
....
}
 

Siassei

Bekanntes Mitglied
Der erste Fehler (.scala80:) bezieht sich auf die Zeile 22
Code:
gradle -S build
:System:compileJava
:System:defineScalaAnt
:System:compileScala
/home/siassei/Projects/core/System/src/main/scala/com/ttr/core/system/logging/LoggingFactory.scala:80: error: not found: type LoggingOutputStream
    var out: OutputStream = new LoggingOutputStream(getLogger("ConsoleStream"), Level.INFO)
                                ^
/home/siassei/Projects/core/System/src/main/scala/com/ttr/core/system/logging/LoggingFactory.scala:84: error: not found: type LoggingOutputStream
    out = new LoggingOutputStream(getLogger("ConsoleStream"), Level.ERROR)
              ^
two errors found

FAILURE: Build failed with an exception.

* Where:
Build fi.....
 
G

Gelöschtes Mitglied 5909

Gast
Code:
 error: not found: type LoggingOutputStream

Hab zwar mit Scala noch nix gemacht, aber fhelt da ein import?
 

Landei

Top Contributor
Habe so eine dumpfe Idee: Irgendwo habe ich schonmal über Build-Probleme bei gemixtem Code gelesen. Hast du mal versucht, das Projekt in der IDE deines Vertrauens statt mit gradle zu builden?
 

Siassei

Bekanntes Mitglied
Bei Netbeans bekomme ich ein ähnliches Problem. Ich kann mir vorstellen, dass der Scala Compiler beim Importieren solange nach einer *.jar sucht, bis er den Namesraum gefunden hat und danach nicht mehr weiter sucht. Das ist meine einzige Erklärung zu dieser Meldung.

@Landei Wo kann man zu diesem Thema was nachlesen?
 

Landei

Top Contributor
Zuletzt bearbeitet:

Siassei

Bekanntes Mitglied
Danke an alle. Einen Tage liegen gelassen und schon sieht man auf den ersten Blick den Fehler :)

Ich habe die Source- und Target-Compatibility auf 1.6 gesetzt. Der Scala-Compiler erzeugt denn alten 1.5 Byte-Code. Das führt natürlich zu Konflikten. Schade, dass der Scala-Compiler nur eine einzige Java-Version unterstützt.
 

Ähnliche Java Themen

Neue Themen


Oben