Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala getClass和类型擦除?_Scala_Types_Erasure - Fatal编程技术网

scala getClass和类型擦除?

scala getClass和类型擦除?,scala,types,erasure,Scala,Types,Erasure,在泛型类型中使用getClass方法时,我有点困惑: def a[K](key: K) = { println(key.getClass) } 这不应该一直是任何参考或任何东西吗?因为类型K信息在运行时不可用 但是a(3)将输出Int,而a(“fdasf”)将输出字符串。 好吧,这是一个愚蠢的问题,我被K和键的类型信息弄糊涂了。在运行时a(3)传递给a的值是3,现在如果编译器检查其值的类型,那么它当然返回整数 scala> def a[K](key: K) = { |

在泛型类型中使用getClass方法时,我有点困惑:

def a[K](key: K) = {
  println(key.getClass)
}
这不应该一直是任何参考或任何东西吗?因为类型K信息在运行时不可用

但是
a(3)
将输出
Int
,而
a(“fdasf”)
将输出
字符串。


好吧,这是一个愚蠢的问题,我被K和键的类型信息弄糊涂了。

在运行时
a(3)
传递给
a的值是
3
,现在如果编译器检查其值的类型,那么它当然返回
整数

scala>   def a[K](key: K) = {
     |   println(key.getClass)
     |   }
a: [K](key: K)Unit

scala> a(3)
class java.lang.Integer

scala> a("34")
class java.lang.String

scala> a(34.34)
class java.lang.Double
在运行时
a(3)
传递给
a
的值是
3
,现在如果编译器检查其值的类型,那么它当然返回
整数

scala>   def a[K](key: K) = {
     |   println(key.getClass)
     |   }
a: [K](key: K)Unit

scala> a(3)
class java.lang.Integer

scala> a("34")
class java.lang.String

scala> a(34.34)
class java.lang.Double
在运行时
a(3)
传递给
a
的值是
3
,现在如果编译器检查其值的类型,那么它当然返回
整数

scala>   def a[K](key: K) = {
     |   println(key.getClass)
     |   }
a: [K](key: K)Unit

scala> a(3)
class java.lang.Integer

scala> a("34")
class java.lang.String

scala> a(34.34)
class java.lang.Double
在运行时
a(3)
传递给
a
的值是
3
,现在如果编译器检查其值的类型,那么它当然返回
整数

scala>   def a[K](key: K) = {
     |   println(key.getClass)
     |   }
a: [K](key: K)Unit

scala> a(3)
class java.lang.Integer

scala> a("34")
class java.lang.String

scala> a(34.34)
class java.lang.Double

虽然编译器在编译时不知道
K
的类型,但在运行时总是传入特定类型的对象。每个物体都知道它是什么类型的。当您调用
getClass
时,您正在调用对象上的一个方法,因此您将返回其实际类型。

当编译器在编译时不知道
K
的类型时,在运行时您总是传入一个特定类型的对象。每个物体都知道它是什么类型的。当您调用
getClass
时,您正在调用对象上的一个方法,因此您将返回其实际类型。

当编译器在编译时不知道
K
的类型时,在运行时您总是传入一个特定类型的对象。每个物体都知道它是什么类型的。当您调用
getClass
时,您正在调用对象上的一个方法,因此您将返回其实际类型。

当编译器在编译时不知道
K
的类型时,在运行时您总是传入一个特定类型的对象。每个物体都知道它是什么类型的。当你调用
getClass
时,你调用的是对象上的一个方法,因此你得到了它的实际类型。

好吧,你是对的,我似乎对类型K的用法感到困惑。K不携带详细的类型信息,而key携带?好吧,你是对的,似乎我对K的用法感到困惑。K不携带详细的类型信息,而key携带?好吧,你是对的,似乎我对K的用法感到困惑。K不携带详细的类型信息,而key携带?好吧,你是对的,似乎我对K的用法感到困惑。K不携带详细信息类型信息,而key携带?