相关疑难解决方法(0)

为什么原始类型如Int在Scala中被删除为Object?

在斯卡拉,

{ x: Option[Int] => x }
   .getClass
   .getMethod("apply", classOf[Option[_]])
   .getGenericParameterTypes
Run Code Online (Sandbox Code Playgroud)

回报Array(scala.Option<java.lang.Object>).我最初期待看到Array(scala.Option<scala.Int>),但我看到它scala.Int是一个值类(extends AnyVal)'其实例未被底层主机系统表示为对象'.

不过,我仍然不理解擦除Object.难道不是更有用java.lang.Integer吗?

autoboxing scala type-erasure

15
推荐指数
1
解决办法
482
查看次数

java 类型擦除如何处理 '?'

希望在了解通用边界之后,我尝试了解通配符上限和下限。我的参考是: https: //docs.oracle.com/javase/tutorial/java/generics/wildcards.html 我发现有一句话我能理解:“通配符可以在多种情况下使用:作为参数、字段或局部变量; “字段和局部变量?无法想象。为什么如此重要的来源不通过一个简单的例子来强调它?

我试图了解 java 编译器用哪个引用来替换(同时擦除)“?”。也许我有一个很大的误解,并且会发生任何删除(因此以下所有示例都不相关)。在下面的例子中: 1.

public static void funcA (List<? extends Number>l)
Run Code Online (Sandbox Code Playgroud)

2.

public static void funcB(List<? super Integer>l)
Run Code Online (Sandbox Code Playgroud)

第二个示例和以下代码之间有区别吗: 3.

public static <T extends Integer> funcC(List<? extends T>l)
Run Code Online (Sandbox Code Playgroud)

示例2与下面的示例是否有不同: 4.

public static <T extends Integer> void funcC(List<T>l)
Run Code Online (Sandbox Code Playgroud)

java generics type-erasure

3
推荐指数
1
解决办法
1916
查看次数

标签 统计

type-erasure ×2

autoboxing ×1

generics ×1

java ×1

scala ×1