[英]Mixing scala and java in Play Framework
我有一个如下所示的Java文件:
package AuthorizeNetFingerprint;
class Fingerprint {
private static Log logger = LogFactory.getLog(Fingerprint.class);
private long sequence;
private long timeStamp;
private String fingerprintHash;
private Fingerprint() {
}
/**
* Creates a fingerprint with raw data fields.
*
* @param loginID
* @param transactionKey
* @param sequence : this number will be concatenated with a random value
* @param amount
* @return A Fingerprint object.
*/
public static String createFingerprint(String loginID,
String transactionKey, long sequence, String amount) {
return transactionKey;
}
}
我正在尝试像这样的scala来访问它:
val fingerprint = new AuthorizeNetFingerprint.Fingerprint
val x_fp_hash = fingerprint.createFingerprint(x_api_login_id,
transaction_key, x_fp_sequence, x_amount)
它给了我这个错误:
包AuthorizeNetFingerprint中的对象指纹不能在包AuthorizeNetFingerprint中访问
是否可以在Play Framework中混合使用Scala和Java?
我做错了什么?
编辑
我需要:公共课指纹
代替
class Fingerprint
三件事:
您的示例中的所有Scala代码都应替换为:
val x_fp_hash = AuthorizeNetFingerprint.Fingerprint.createFingerprint(…)
这在使用sbt(0.11.3)编译的Scala(2.9.1)控制台中有效。
是的,您可以在Play2应用程序中混合使用Java和Scala,只需将Java代码放入应用程序目录即可。 请注意,Java类必须位于其相应的包目录中,而Scala类不是这种情况。
我不熟悉Play框架,但是Scala示例代码的第一行应实例化类AuthorizeNetFingerprint.Fingerprint
,该类仅具有私有构造函数 ,而不是公共类 (即,只能从同一包中访问)。
在public
授课后,也许对AuthorizeNetFingerprint.Fingerprint.createFingerprint(...)
的调用起作用了?
从理论上讲,这应该很好。 查看此博客Re Java和Scala互操作。 http://www.codecommit.com/blog/java/interop-between-java-and-scala
在创建项目时,您是否指定了Java,Scala或None(1、2或3)
通常以小写形式命名Java软件包。
如果您尝试使用以大写开头的Java包,Scala也会感到困惑。 如果使用authorize
而不是AuthorizeNetFingerprint
作为包名,它将进行编译。
另外,也不需要这样做:
val fingerprint = new AuthorizeNetFingerprint.Fingerprint
createFingerprint
是静态方法,因此只需调用
val x_fp_hash = Fingerprint.createFingerprint
(在导入authorize.Fingerprint
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.