Scala 如何从T中获取类型和类型大小?

Scala 如何从T中获取类型和类型大小?,scala,types,type-conversion,bytearray,Scala,Types,Type Conversion,Bytearray,如何从T获取类型和类型大小? 例如,当我试图在Scala中使用泛型将Integer或Long转换为ByteArray时,如何从T获取类型信息 def dataToByteArray[T](x: T) = { if T is IntType ByteBuffer.allocate(4).putInt(x).array() else if T is LongType ByteBuffer.allocate(8).putLong(x).array() else ra

如何从T获取类型和类型大小? 例如,当我试图在Scala中使用泛型将Integer或Long转换为ByteArray时,如何从T获取类型信息

def dataToByteArray[T](x: T) = {
  if T is IntType
    ByteBuffer.allocate(4).putInt(x).array()
  else if T is LongType
    ByteBuffer.allocate(8).putLong(x).array()
  else
    raise an error
}
我可能会使用多态函数,但我很好奇scala如何提供类型信息

def dataToByteArray(x: Int) = {
  ByteBuffer.allocate(4).putInt(x).array()
}
def dataToByteArray(x: Long) = {
  ByteBuffer.allocate(8).putLong(x).array()
}

可以,但它不像在C/C++中那样简单——为了得到T类型对象的估计大小,必须遍历对象的图形。有一些用于此的库,例如


注意,使用这样的库是非常罕见的,很可能意味着你做了错事。

你可以,但它并不像C/C++那样简单——为了得到类型T的对象的估计大小,你必须遍历对象的图形。有一些用于此的库,例如


注意,使用这样的库是非常罕见的,很可能意味着你做了错事。

你可以,但它并不像C/C++那样简单——为了得到类型T的对象的估计大小,你必须遍历对象的图形。有一些用于此的库,例如


注意,使用这样的库是非常罕见的,很可能意味着你做了错事。

你可以,但它并不像C/C++那样简单——为了得到类型T的对象的估计大小,你必须遍历对象的图形。有一些用于此的库,例如


请注意,使用这样的库是非常罕见的,很可能意味着你做错了什么。

我突然想到了一个主意:吼叫

def dataToByteArray[T](x: T) = {
  x match {
   case i: Int => ByteBuffer.allocate(4).putInt(x).array()
   case l: Long => ByteBuffer.allocate(8).putLong(x).array()
   case _ => throw new Exception("Runtime exception")
  }
}

我突然想到了一个主意

def dataToByteArray[T](x: T) = {
  x match {
   case i: Int => ByteBuffer.allocate(4).putInt(x).array()
   case l: Long => ByteBuffer.allocate(8).putLong(x).array()
   case _ => throw new Exception("Runtime exception")
  }
}

我突然想到了一个主意

def dataToByteArray[T](x: T) = {
  x match {
   case i: Int => ByteBuffer.allocate(4).putInt(x).array()
   case l: Long => ByteBuffer.allocate(8).putLong(x).array()
   case _ => throw new Exception("Runtime exception")
  }
}

我突然想到了一个主意

def dataToByteArray[T](x: T) = {
  x match {
   case i: Int => ByteBuffer.allocate(4).putInt(x).array()
   case l: Long => ByteBuffer.allocate(8).putLong(x).array()
   case _ => throw new Exception("Runtime exception")
  }
}