当前位置:  开发笔记 > 编程语言 > 正文

从专业课程中获取ClassTag

如何解决《从专业课程中获取ClassTag》经验,为你挑选了1个好方法。



1> som-snytt..:

专业化发生的时间晚于专业化的ClassTag,因此谷仓门的问题就出现了.

另一个问题是专门化将创建双重定义,因此以明显的方式专门化方法并非易事.

这是尝试混合提供类标记的专用方法.

特殊的专用f呼叫ct,在特征中被覆盖.

我不知道虚拟arg ct是必要的,以使其专业化; 也许ClassTag[A]结果类型不够.

$ scalam
Welcome to Scala 2.12.0-M3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60).
Type in expressions for evaluation. Or try :help.

scala> import reflect.ClassTag
import reflect.ClassTag

scala> class CT[@specialized(Int) A] {
     |   def ct(a: A): ClassTag[A] = ???
     |   def f: Array[A] = ct(null.asInstanceOf[A]).newArray(1)
     | }
defined class CT

scala> trait CTS { def ct$mcI$sp(i: Int): ClassTag[Int] = reflect.classTag[Int] }
defined trait CTS

scala> (new CT[Int] with CTS).f
res0: Array[Int] = Array(0)

显示专门的调用:

scala> :javap -c -
Compiled from ""
[snip]
      16: invokevirtual #32                 // Method $line16/$read$$iw$$iw$$anon$1.f$mcI$sp:()[I
      19: putfield      #24                 // Field res0:[I

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有