2

Play2フレームワークのSecureSocialプラグインの永続性レイヤーを作成しています。https://github.com/play-modules/modules.playframework.org/blob/master/app/models/ss/MPOOAuth2Info.javaで例を見つけました:

package models.ss;

import models.AbstractModel;
import securesocial.core.java.OAuth2Info;
import javax.persistence.Entity;

@Entity
public class MPOOAuth2Info extends AbstractModel
{
    public String accessToken;

    public String tokenType;

    public Integer expiresIn;

    public String refreshToken;

    public MPOOAuth2Info()
    {
        // no-op
    }

    public MPOOAuth2Info(OAuth2Info oAuth2Info)
    {
        this.accessToken = oAuth2Info.accessToken;
        this.tokenType = oAuth2Info.tokenType;
        this.expiresIn = oAuth2Info.expiresIn;
        this.refreshToken = oAuth2Info.refreshToken;
    }

    public OAuth2Info toOAuth2Info()
    {
        OAuth2Info oAuth2Info = new OAuth2Info();

        oAuth2Info.accessToken = this.accessToken;
        oAuth2Info.tokenType = this.tokenType;
        oAuth2Info.expiresIn = this.expiresIn;
        oAuth2Info.refreshToken = this.refreshToken;

        return oAuth2Info;
    }
}

しかし、APIが変更されたため、使用できませんsecuresocial.core.java.OAuth2Info。SecureSocialはScalaによって作成され、このクラスはJavaフロントエンドでした。そこで、Scalaを直接使用することにしました。

case class OAuth2Info(accessToken: String, tokenType: Option[String] = None,
                  expiresIn: Option[Int] = None, refreshToken: Option[String] = None)

私の結果:

package models.security.securesocial;

import models.AbstractModel;
import scala.Option;
import securesocial.core.*;

import javax.persistence.Entity;

/**
 * Persistence wrapper for SecureSocial's {@link } class.
 *
 * @author Steve Chaloner (steve@objectify.be)
 */
@Entity
public class MPOOAuth2Info extends AbstractModel
{
    public String accessToken;

    public String tokenType;

    public Integer expiresIn;

    public String refreshToken;

    public MPOOAuth2Info(){
        // no-op
    }

    public MPOOAuth2Info(OAuth2Info oAuth2Info){
        this.accessToken = oAuth2Info.accessToken();
        this.tokenType = oAuth2Info.tokenType().get();
        this.expiresIn = scala.Int.unbox(oAuth2Info.expiresIn().get());
        this.refreshToken = oAuth2Info.refreshToken().get();
    }

    public OAuth2Info toOAuth2Info(){
        return new OAuth2Info(accessToken, Option.apply(tokenType), Option.apply(SOME_TRANSFORMATION(expiresIn)), Option.apply(refreshToken));
    }
}

scala.Intしかし、型への/型からの変換に問題がありjava.lang.Integerます。に変換するscala.Intには、java.lang.Integerを使用しscala.Int.unbox()ました。接続方法ですか?そして、私は疑似コードを入力したコードで:に変換java.lang.Integerする方法がわかりません。このSOME_TRANSFORMATIONの正しい実装は何ですか?scala.IntSOME_TRANSFORMATION()

ありがとうございました

4

2 に答える 2

6

scala.Int.unbox(new java.lang.Integer(3))与えるInt = 3

scala.Int.box(3)与えるInteger = 3

于 2013-02-18T20:34:43.650 に答える
3

Scalaのボックスとボックスの解除は、自動的かつ透過的に行われます。さらに、scala.Intそれは一種のフィクションです。ローカル変数に格納されている場合、正式なパラメータとして渡されている場合、またはクラスに格納されている場合は、ネイティブint(Java / JVM)です。ただし、パラメーター化された/ジェネリック型の値を介してトラフィッキングする必要がある場合は、ボックス化およびボックス化解除する必要があります。(問題の型パラメーターが特殊化されている場合は例外ですが、それは別の話です。)

于 2013-02-19T05:11:05.460 に答える