Zastanawiam się, wywołując metodę, której argument może być lub nie być instancją value class. Ponieważ celem klas wartości jest uniknięcie boksowania wartości bazowej, jeśli typem parametru jest klasa wartości, wówczas dana metoda będzie w rzeczywistości wymagać wartości niezapakowanej. Aby obsłużyć tę sprawę, próbuję odwijać podstawową wartość z klasy wartości. I najpierw trzeba ustalić, czy argument jest z klasą wartości, a ja tu trafić na pierwszą przeszkodę:Scala: rozpoznawanie obiektów o klasach wartości
def isObjectOfValueClass(arg: Any) =
classOf[AnyVal].isAssignableFrom(arg.getClass)
to nie działa zgodnie z oczekiwaniami, jako metoda zwraca true
dla:
case class NonValueClass(underlying: Int)
W jaki sposób można wdrożyć isObjectOfValueClass
? Czy istnieje prostszy sposób refleksyjnego wywoływania metody, która może zająć obiekt klasy wartości jako argument?
Nawiasem mówiąc, klasa wartości może owijać nie tylko prymitywy, ale również obiekty. –