2016-12-03 5 views
2

Ich habe eine Klasse namens Quadrat erweitert eine abstrakte Klasse namens Form erstellt. Wenn ich getClass auf dem Platz rufe, bekomme ich: Klasse A $ A101 $ A $ A101 $ statt Quadrat.Klasse von benutzerdefinierten Scala-Objekt

Ich möchte getClass (oder eine ähnliche Funktion) aufrufen und einen Wert erhalten, mit dem ich überprüfen kann, ob O: Object == Quadrat.

Jeder Rat wird geschätzt. Danke

+0

99,9% der Zeit mit 'getClass' ist eine schreckliche Idee. Was versuchst du eigentlich zu tun? –

+0

@MrD im Grunde versuche ich, eine Methode zu schreiben, die jedes Objekt nehmen kann, aber alles ignorieren sollte, das nicht eine bestimmte Menge von Objekten ist. Ich bin neu in Scala, also schätze ich, dass ich einen Hinweis auf irgendeine Art vor $ square zurückbekomme? Danke für die Hilfe. –

+0

Sie sollten die Typen haben, die Sie filtern möchten, Unterklasse ein gemeinsames Merkmal oder Klasse und dann nach diesem gemeinsamen Merkmal/Klasse fragen. –

Antwort

2

getClass ist nicht etwas, was Sie sehr oft brauchen. Sie können den Typ eines Objekts mit besseren Abstraktionen abfragen, wie isInstanceOf oder pattern matching.

Hier einige REPL:

scala> abstract class Shape 
defined class Shape 

scala> class Square extends Shape 
defined class Square 

scala> class Circle extends Shape 
defined class Circle 

scala> def isSquare(s: Shape): Boolean = s.isInstanceOf[Square] 
isSquare: (s: Shape)Boolean 

scala> isSquare(new Circle) 
res4: Boolean = false 

scala> isSquare(new Square) 
res5: Boolean = true 

Hier ist eine alternative Art und Weise isSquare zu schreiben:

scala> def isSquare(s: Shape): Boolean = { 
    | s match { 
    |  case sq: Square => true 
    |  case _ => false 
    | } 
    | } 
+0

Danke dafür, das ist genau das, was ich brauchte. –

Verwandte Themen