Scala:班级中的公共静态决赛 [英] Scala: public static final in a class
问题描述
我正在尝试使用 public static final 的真正等价物.htmlrel =nofollow noreferrer> TwiP 。
I'm trying to get a real equivalent for Java's public static final
in Scala for using TwiP.
在一个<创建一个 val
code> object 对我不起作用,因为它是新生成的类的一部分示例$ .class
并且TwiP不能从类 Example.class
访问它。
Creating a val
in an object
doesn't work for me, because it's part of a new generated class Example$.class
and TwiP can't access it from class Example.class
.
以下是我尝试移植到的Java类的示例Scala:
Here's an example of a Java Class I'm trying to port to Scala:
public static final String[] MY_STRINGS = { "A", "B", "C" };
@Test
public void myTest(@Values("MY_STRINGS") String string) {
...
}
但我不知道如何将 public static final
移植到Scala。如果它是像这里的对象中的val那么
But I don't know how to port the public static final
to Scala. If it's a val in an object like here
@RunWith(classOf[TwiP])
class Foo {
import Foo.MY_STRINGS
@Test
def testTwiP(@Values("MY_STRINGS") value: String): Unit = {
println("I'm testing value " + value + ".")
}
}
object Foo {
val MY_STRINGS = Array("A", "B", "C")
}
我只得到以下异常:
net.sf.twip.internal.TwipConfigurationError:
there is no method or field 'MY_STRINGS' named in the @Values annotation of Parameter#1
如何使用Scala解决问题?
How can I solve the problem using Scala?
推荐答案
以下Scala代码:
class Foo{
import Bar.MY_STRINGS
}
object Bar{
val MY_STRINGS=Array("A","B","C")
}
生成以下Java类:
public final class Bar extends java.lang.Object{
public static final java.lang.String[] MY_STRINGS();
public static final int $tag() throws java.rmi.RemoteException;
}
public final class Bar$ extends java.lang.Object implements scala.ScalaObject{
public static final Bar$ MODULE$;
public static {};
public Bar$();
public java.lang.String[] MY_STRINGS();
public int $tag() throws java.rmi.RemoteException;
}
public class Foo extends java.lang.Object implements scala.ScalaObject{
public Foo();
public int $tag() throws java.rmi.RemoteException;
}
以下Scala代码:
class Foo{
import Foo.MY_STRINGS
}
object Foo{
val MY_STRINGS=Array("A","B","C")
}
生成以下Java类:
public class Foo extends java.lang.Object implements scala.ScalaObject{
public Foo();
public int $tag() throws java.rmi.RemoteException;
}
public final class Foo$ extends java.lang.Object implements scala.ScalaObject{
public static final Foo$ MODULE$;
public static {};
public Foo$();
public java.lang.String[] MY_STRINGS();
public int $tag() throws java.rmi.RemoteException;
}
当对象具有静态成员时,未在类上定义静态成员与该类相同的名称是 Scala Bug#1735 ,它已在Scala中修复2.8快照。
The fact that static members aren't defined on the class when the object has the same name as the class is Scala Bug #1735 and it's fixed in Scala 2.8 snapshots.
所以看起来TwiP根本无法工作,除非你要么升级Scala,要么找到让TwiP与非静态工作的方法参数生成方法。
So it looks like TwiP isn't going to work at all unless you either upgrade Scala, or find a way to get TwiP to work with non-Static parameter generation methods.
这篇关于Scala:班级中的公共静态决赛的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!