Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中声明类内的对象类(scala代码)_Java_Scala_Class_Object - Fatal编程技术网

如何在java中声明类内的对象类(scala代码)

如何在java中声明类内的对象类(scala代码),java,scala,class,object,Java,Scala,Class,Object,我在scala中有这样一个类: class AuthResponse( val ip: String, val authorized: Boolean, val sid: String, val uid: String, val ratio: Double,

我在scala中有这样一个类:

class AuthResponse(  val ip: String,
                         val authorized: Boolean,
                         val sid: String,
                         val uid: String,
                         val ratio: Double,
                         val skipRecording: Boolean,
                         val rejectReason: String,
                         val userTrackingState: String,
                         val pid: Int = conf.getString(s"WebRecorder.Environments.${conf.getString("WebRecorder.Current.Environment")}.Pid").toInt) {
      // If we write val before input vars it constract the same values

      //Override toString method
      override def toString: String = {
            "ip: " + ip + "\n" +
            "authorized: " + authorized + "\n" +
            "sid: " + sid + "\n" +
            "uid: " + uid + "\n" +
            "ratio: " + ratio + "\n" +
            "skipRecording: " + skipRecording + "\n" +
            "rejectReason: " + rejectReason + "\n" +
              "pid: " + pid + "\n" +
            "userTrackingState: " + userTrackingState
      }
    }

    object AuthResponse {

      def apply(ip: String, authorized: Boolean, sid: String, uid: String, ratio: Double, skipRecording: Boolean, rejectReason: String, userTrackingState: String): AuthResponse =
        new AuthResponse(ip, authorized, sid, uid, ratio, skipRecording, rejectReason, userTrackingState)

      def apply(responseAsJson: String): AuthResponse =  {
        new Gson().fromJson(responseAsJson, classOf[AuthResponse])
      }
    }
我正在尝试将其制作为java代码,如下所示:

public class AuthResponse {

String ip;
Boolean authorized;
String sid;
String uid;
Double ratio;
Boolean skipRecording;
String rejectReason;
String userTrackingState;
int pid = Integer.parseInt(Configuration.prop.getProperty(""));

@Override
public String toString(){
   return
   ("ip: " + ip + "\n" +
    "authorized: " + authorized + "\n" +
    "sid: " + sid + "\n" +
    "uid: " + uid + "\n" +
    "ratio: " + ratio + "\n" +
    "skipRecording: " + skipRecording + "\n" +
    "rejectReason: " + rejectReason + "\n" +
    "pid: " + pid + "\n" +
    "userTrackingState: " + userTrackingState + "\n");
}

    class AuthResponse(){

        public AuthResponse apply(String ip,boolean authorized, String sid,String uid, double ratio,boolean skipRecording, String rejectReason, String userTrackingState){
           return new AuthResponse(ip,authorized,sid,uid,ratio,skipRecording,rejectReason,userTrackingState);
        }

        public com.pipe.pipeapp.AuthResponse apply(String responseAsJson){
            return new
        }

    }
}

我想看看如何在我的类中实现另一个与scala同名的类,我们可以使用object和class,它是完全不同的类(因为它不是class,而是object),但在Java中我们不能这样做,如何在java中实现包括对象类在内的同一个类?

我向您提供了在这种情况下有帮助的文档。这里解释一下什么时候使用嵌套类。

Scala
object
可能被编译成不同的东西,这取决于里面的内容。在您的例子中,
对象AuthResponse
实际上是在类似于
类AuthResponse
本身的Java
静态
方法中编译的。所以应该是这样的:

public class AuthResponse {

    public final String ip;
    public final Boolean authorized;
    public final String sid;
    public final String uid;
    public final Double ratio;
    public final Boolean skipRecording;
    public final String rejectReason;
    public final String userTrackingState;
    public final int pid;


    public AuthResponse(String ip, Boolean authorized, String sid, String uid, Double ratio, Boolean skipRecording, String rejectReason, String userTrackingState, int pid) {
        this.ip = ip;
        this.authorized = authorized;
        this.sid = sid;
        this.uid = uid;
        this.ratio = ratio;
        this.skipRecording = skipRecording;
        this.rejectReason = rejectReason;
        this.userTrackingState = userTrackingState;
        this.pid = pid;
    }

    public AuthResponse(String ip, Boolean authorized, String sid, String uid, Double ratio, Boolean skipRecording, String rejectReason, String userTrackingState) {
        this(ip, authorized, sid, uid, ratio, skipRecording, rejectReason, userTrackingState, Integer.parseInt(Configuration.prop.getProperty("")));
    }


    @Override
    public String toString() {
        return
                ("ip: " + ip + "\n" +
                        "authorized: " + authorized + "\n" +
                        "sid: " + sid + "\n" +
                        "uid: " + uid + "\n" +
                        "ratio: " + ratio + "\n" +
                        "skipRecording: " + skipRecording + "\n" +
                        "rejectReason: " + rejectReason + "\n" +
                        "pid: " + pid + "\n" +
                        "userTrackingState: " + userTrackingState + "\n");
    }

    public static AuthResponse apply(String ip, boolean authorized, String sid, String uid, double ratio,
                                     boolean skipRecording, String rejectReason, String userTrackingState) {
        return new AuthResponse(ip, authorized, sid, uid, ratio, skipRecording, rejectReason, userTrackingState);
    }

    public static AuthResponse apply(String responseAsJson) {
        return new Gson().fromJson(responseAsJson, AuthResponse.class);
    }
}

尽管使用Java,我还是会重命名
并将
方法应用于更有意义的东西,比如
create
。您也可以为字段引入getter,而不是将其公开,但我没有费心将代码缩短。

欢迎使用Stack Overflow!请编辑您的答案,以包含您的链接建议的解决方案的摘要,这样您的答案就不会受到链接损坏的影响。因此,您一般说,上面的scala代码实际上是java中的嵌套类?不是一般的,但有许多不同的方法。您可以使用嵌套类精确地表示结构,也可以使用带有构造函数的SergGr答案。您还可以使用像IntelliJ这样的ID自动将scala转换为java代码。也许在java中,SergGr选项更容易理解。