如何在java中声明类内的对象类(scala代码)
我在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,
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选项更容易理解。