首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中实例化scala.Int

在Java中实例化scala.Int
EN

Stack Overflow用户
提问于 2013-02-19 04:24:10
回答 2查看 3.4K关注 0票数 2

我在https://github.com/play-modules/modules.playframework.org/blob/master/app/models/ss/MPOOAuth2Info.java上找到了一个例子

代码语言:javascript
复制
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;
    }
}

但是接口被改变了,所以我不能使用securesocial.core.java.OAuth2Info。SecureSocial是由Scala编写的,这个类是Java的前端。所以我决定直接使用Scala:

代码语言:javascript
复制
case class OAuth2Info(accessToken: String, tokenType: Option[String] = None,
                  expiresIn: Option[Int] = None, refreshToken: Option[String] = None)

我的结果是:

代码语言:javascript
复制
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.unbox()。是连接方式吗?我不知道如何将java.lang.Integer转换为scala.Int:在代码中,我输入了伪代码SOME_TRANSFORMATION()。此SOME_TRANSFORMATION的正确实现是什么?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-19 04:34:44

scala.Int.unbox(new java.lang.Integer(3))给了Int = 3

scala.Int.box(3)给了Integer = 3

票数 6
EN

Stack Overflow用户

发布于 2013-02-19 13:11:05

Scala自动和透明地装箱和拆箱。此外,scala.Int在某种程度上是虚构的。当存储在本地变量中、作为形参传递或存储在类中时,它是原生int (类似于Java / JVM)。但是当它必须通过参数化/泛型类型的值进行传输时,必须对其进行装箱和取消装箱。(有一个例外,当有问题的类型参数是专门化的,但那是另一回事了。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14944684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档