- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写 Java 代码,我需要在其中调用定义如下的 Scala 函数:
def func[T: TypeTag: ClassTag ](name: String): RDD[T] = ...
在 Scala 中,我会简单地调用 func StringJava 代码应该类似于: func( "a", arg1 , arg2 )其中 arg1 是 TypeTag< T >,arg2 是 ClassTag< T >
我不确定如何在 java 中生成 arg1 和 arg2
最佳答案
你想为通用 T
做吗?还是针对特定的?对于generic,没办法,接受ClassTag<T>
和 TypeTag<T>
作为参数(就像 Scala 代码实际做的那样)。具体来说,我建议在 Scala 中编写一个包装器,例如def func_String(name: String) = func[String](name)
并从 Java 调用它。
或更笼统,但复杂得令人讨厌:
import scala.reflect.ClassTag
import scala.reflect.runtime.universe._
def func1[T](name: String, clazz: Class[T]) = {
val classTag = ClassTag[T](clazz)
val m = runtimeMirror(clazz.getClassLoader)
val tpe = m.classSymbol(clazz).toType
val typeCreator = new scala.reflect.api.TypeCreator {
def apply[U <: Universe with Singleton](m1: scala.reflect.api.Mirror[U]): U # Type =
if (m1 != m) throw new RuntimeException("wrong mirror") else tpe.asInstanceOf[U#Type]
}
val typeTag = TypeTag[T](m, typeCreator)
func(name)(typeTag, classTag)
}
(您也可以用 Java 编写等价物。)
关于java - 如何在java中获取scala的TypeTag和ClassTag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38589179/
有人可以用下面的错误消息解释 Scala 编译器试图告诉我的内容吗? object Some { def apply[T: ClassTag](data: T)(implicit ordering
当我有一个@specialized 类时,我会保留有关我的类型是什么原语的信息。有没有一种快速的方法来获取ClassTag[T],例如创建数组? 这不会编译,因为没有可用的 ClassTag[T] c
让我们以这个为例: import scala.reflect._ def get[T](list: List[Any])(implicit tag: ClassTag[T]) = { list.f
我想创建一个类型类,将其定义的抽象类型限制为具有 ClassTag。这是一个简化的示例: trait A[T] { type B <: Z val tag = implicitly[Class
现在 scala 已经通过 ClassTag 迭代到 JVM 类型删除修复。 typeclass,为什么它是一个选择加入,而不是让编译器总是捕获类型签名以进行运行时检查。拥有一个隐式参数化类型约束将可
我正在编写一个通用方法,它可以将Any 类型参数转换为传递的ClassTag[T] 类型的对象,如果可能。 def getTypedArg[T: ClassTag](any: Any): Option
这不起作用 - 有什么办法可以让我的代码保持通用并以某种方式反射(reflect) classOf 一个 ClassTag? class Foo[T : reflect.ClassTag] { def
我认为以下是收集满足给定类型的集合元素的最简洁、最正确的形式: def typeOnly[A](seq: Seq[Any])(implicit tag: reflect.ClassTag[A]): S
我使用的是 Scala 2.10,发现在对泛型参数使用类型推断时出现了我认为很奇怪的行为。考虑下面的例子(注意 i 只是一个虚拟变量): scala> import scala.reflect.{Cl
我知道 guava 的 TypeToken 可以做到这一点: class C[I, O] class A[T] { val tok = new TypeToken[T](getClass){
如何在实现中 stub 使用 ClassTag 的方法? class RefsFactory { def get[I <: Item : ClassTag]: RefTo[I] = { v
我有一种方法可以探索不同类函数的不同参数值。以前,我做了一些非类型安全的运行时检查,其中,删除后,重要的是我使用的是 Function2 还是 Function3。我已经尝试使用 ClassTags/
import org.apache.spark.api.java.JavaRDD import org.apache.spark.rdd.RDD import scala.reflect.ClassT
类型参数 T 上的模式匹配引发未检查警告 scala> def f[T](v: List[Any]): List[T] = v.collect { case x: T => x }
我写了一个宏,它读取类字段: import scala.language.experimental.macros import scala.reflect.macros.whitebox object
我在 Scala 中有以下代码并且工作正常: object TestVanilla { def callMe[A: ClassTag](f: Int => A): Array[A] = Array
在下面最简单的例子中我没有编译错误: object App { def main(args: Array[String]) = { test[Int]() } def test[T
类标签似乎真的很容易使用,然而,在数学上总是可靠地自动插入 ClassTag 是不可能的吗?如果不是全部,至少在某些场景中使用样板?考虑这个例子: def foo[T: ClassTag] = {
简介 : ... TypeTag[T] encapsulates the runtime type representation of some compile-time type T. ... ..
这很好用 class MyClass[T xs.max } } 如果您删除了 implicit ,您必须将调用更改为 xs.min和 xs.max这需要隐含的 Ordering . objec
我是一名优秀的程序员,十分优秀!