I'm trying to get a real equivalent for Java's public static final
in Scala for using TwiP.
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
.
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) {
...
}
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")
}
I only get the following exception:
net.sf.twip.internal.TwipConfigurationError:
there is no method or field 'MY_STRINGS' named in the @Values annotation of Parameter#1
How can I solve the problem using Scala?
The following Scala code:
class Foo{
import Bar.MY_STRINGS
}
object Bar{
val MY_STRINGS=Array("A","B","C")
}
Generates the following Java classes:
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;
}
The following Scala code:
class Foo{
import Foo.MY_STRINGS
}
object Foo{
val MY_STRINGS=Array("A","B","C")
}
Generates the following Java classes:
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;
}
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With