2016-12-03 3 views
2

Я создал класс с именем square, который расширяет абстрактный класс, называемый формой. Когда я вызываю getClass на квадрат, я получаю: class A $ A101 $ A $ A101 $ square, а не просто квадрат.Получить класс пользовательского объекта Scala

Я хочу вызвать getClass (или аналогичную функцию) и получить значение, которое позволяет мне проверить, является ли o: Object == square.

Любые советы приветствуются. Спасибо

+0

99,9% времени с помощью 'getClass' страшная мысль. Что вы на самом деле пытаетесь сделать? –

+0

@MrD в основном я пытаюсь написать метод, который может принимать любой объект, но должен игнорировать все, что не является определенным набором объектов. Я новичок в Scala, поэтому я предполагаю, что возвращаю какой-либо указатель до $ square? Спасибо за помощь. –

+0

У вас должны быть типы, которые вы пытаетесь отфильтровывать подкласс с некоторой общей чертой или классом, а затем запрашивать этот общий признак/класс. –

ответ

2

getClass не то, что вам нужно очень часто. Вы можете запросить тип объекта с лучшими абстракциями, например isInstanceOf или pattern matching.

Вот некоторые РЕПЛ:

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 

Вот альтернативный способ написания isSquare:

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

Спасибо за это, это именно то, что мне нужно. –

Смежные вопросы