繁体   English   中英

在Play Framework中混合Scala和Java

[英]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

三件事:

  1. 正如您已经知道的那样,您的Fingerprint类需要公开。
  2. 您已经将Fingerprint的构造函数设为私有; 您无法实例化它。
  3. Java类中的任何静态方法都应通过Scala中该类的伴随对象进行访问。

您的示例中的所有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM