问题标签 [scala-reflect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2070 浏览

scala - 通过对字符串的反射定义 spark udf

我正在尝试从包含 scala 函数定义的字符串中定义 spark(2.0) 中的 udf。这是代码段:

这给了我一个错误:

但是,当我将 udf 定义为:

它工作得很好。这里有什么问题?最终目标是获取一个具有 scala 函数定义的字符串并将其用作 udf。

0 投票
1 回答
102 浏览

android - 在 Android 上测试 Scala:“找不到 scala.reflect.ScalaSignature.bytes”

我正在尝试用 Scala 编写仪器测试(完整代码在这里)。

任何想法可能导致java.lang.IncompatibleClassChangeError: Couldn't find scala.reflect.ScalaSignature.bytes运行时错误?

我试图保持scala.reflect.ScalaSignature.bytesbuild.sbt

但这似乎没有帮助。

完整的堆栈跟踪:

0 投票
1 回答
1580 浏览

scala - 如何使用 Scala 反射获取方法的返回类型字符串?

考虑以下代码:

给定对象或类,我需要首先找到方法名称(似乎并不难)。

之后,对于每个方法,我想找到Scala返回类型(不是 Java 的)的字符串描述。例如,对于Foo.foo,我需要 String List[(String, Int)],对于Bar.bar,我需要 String Option[(String, Long)]

我看到了这个这个教程,但无法弄清楚。

编辑:这是我根据评论尝试过的:

我得到的错误是:

但是,这有效(在 REPL 中尝试过):

我需要以第一种方式使用它,我事先不知道将传递哪些对象/类。任何帮助将不胜感激。

0 投票
1 回答
1763 浏览

scala - 使用 Scala 2.11 反射时出现“涉及对象 InterfaceAudience 的非法循环引用”

我在 scala 2.11.7 上遇到了上述错误:

我的编译过程的附加信息:

我已经缩小到重现所需的最低限度:

我有一个带有 build.gradle 的项目,如下所示:

这是我的主要内容:

建设:

生成一个包含所有依赖项的 jar。

导致上述异常

0 投票
1 回答
166 浏览

scala - 如何通过 scala-reflect 和 TypeTag (Scala 2.10) 访问通用类字段

我正在尝试检查泛型类中是否存在字段。

我该如何实现这个?

0 投票
1 回答
359 浏览

scala - Guice,无法绑定 ClassTag[T](要知道 T 类的名称)

我想知道一个泛型类的名称。

我现在使用的解决方案如下。我定义了class A[T: ClassTag] {...}能够做的类classTag[T].toString

这可以编译,但 Guice 存在问题。我得到错误No implementation for scala.reflect.ClassTag<com.test.Person> was bound

有没有 :

  • 知道可以与 Guice 一起使用的泛型类的名称的另一种解决方案?或者
  • 一种ClassTag[T]与 Guice 绑定的方法?

完整代码:

0 投票
0 回答
343 浏览

scala - 如何为所有实现类都是私有的接口实现 KryoSerializer?

我正在尝试编写一个类来实现KryoSerializer,以便我可以序列化对象以与 Spark 一起使用。我遇到的问题是,虽然所有类都实现了公共接口,但所有实现类都是私有的。Kryo 似乎不想让我为私有的包外类或接口定义序列化程序。

这个问题表现出来的方式是,当我尝试定义KryoSerializer类时,我收到一个错误,即class [implementation] in package graph cannot be accessed in package [same package].

我希望有人可以提供帮助,是解决此问题的策略。

我理解 Kryo 想要序列化和反序列化具体对象的原因。但是,在这种情况下,由于无论如何我都在定义自​​己KryoSerializer的,因此为接口定义序列化实际上会更有意义。有没有办法欺骗 Kryo 做正确的事?

(这会起作用的原因是,有一个相关Object函数具有使用接口获取实例并从流中写入或读取的函数。我的序列化程序本质上会包装这些函数,同时添加一些序列化格式版本信息。)

我想到的一种可能性是反射技巧。当反序列化具有私有/最终成员的类时,我们有时使用反射使私有成员可访问和可写,设置值,然后将其设置回私有/最终。我不确定是否可以为另一个打包程序中的私有类执行此操作,但即使可以,它看起来也相当丑陋且效率低下。

另一种可能性是定义扩展私有类的新类,以及一组在它们之间转换的隐式。但是,由于某些原因,这也会相当难看,并且有很多私人课程存在争议。

任何人都可以提出一种方法吗?关于我应该避免的陷阱的建议?

0 投票
1 回答
667 浏览

scala - ClassTag.runtimeClass.isInstance 不适用于 AnyVal

使用 scala ClassTags 我发现当您将它与 AnyVal 对象一起使用时,classTag.runtimeClass.isInstance 无法正常工作。这是一个片段,您可以在其中对其进行测试。有什么想法可以使它适用于 AnyVal 对象吗?

顺便说一句,我正在使用 Scala 2.10

0 投票
2 回答
157 浏览

scala - Scala:从构造函数中的内部类获取外部类

我有一个匿名内部类,我想在构造函数中访问它的(匿名)外部类。所以我想实现这个方法:

0 投票
1 回答
55 浏览

scala - 基于 `Class` 实例执行显式转换

假设有一个类X。在我的代码中的某个时刻,我得到了一个o类型Object,我想将它显式地转换为X. 通常,我会这样做val x: X = o.asInstanceOf[X]。但是,X不在范围内,我所拥有的只是X的实例Class,如下所示:

  1. 我将作为参数传递classOf[X]给我的函数,称为classOfX.
  2. 在我的职能范围内,我想做val x: X = o.asInstanceOf[classOfX].

有没有办法在 Scala 中做到这一点?