如何将包含结构的嵌套枚举从Swift转换为Java?
我正在尝试将以下Swift 4.1.2代码转换为Java1.5或更高版本。我有包含各种结构的嵌套枚举如何将包含结构的嵌套枚举从Swift转换为Java?,java,swift,struct,enums,Java,Swift,Struct,Enums,我正在尝试将以下Swift 4.1.2代码转换为Java1.5或更高版本。我有包含各种结构的嵌套枚举 import UIKit enum CreateOrder { enum FormatUseByDate { struct Request { var date: Date } struct Response { var date: Date } struct ViewModel { v
import UIKit
enum CreateOrder
{
enum FormatUseByDate
{
struct Request
{
var date: Date
}
struct Response
{
var date: Date
}
struct ViewModel
{
var date: String
}
}
}
Java不支持struct
关键字。但是,与上述结构之一等效的结构可以是:
class Request
{
public Date date;
}
我曾多次尝试创建嵌套枚举并引用结构等效项。例如:
import java.util.Date;
interface Usecase {
}
class Response implements Usecase {
public Date date;
}
class Request implements Usecase {
public Date date;
}
class ViewModel implements Usecase {
String date;
}
public class EnumDemo {
enum CreateOrder {
FORMATUSEBYDATE;
enum FormatUseByDate {
REQUEST(new Request()), RESPONSE(new Response()), VIEWMODEL(new ViewModel());
Usecase usecase;
FormatUseByDate(Request req) {
this.usecase = req;
}
FormatUseByDate(Response res) {
this.usecase = res;
}
FormatUseByDate(ViewModel vm) {
this.usecase = vm;
}
}
}
public static void main(String[] args) {
System.out.println(CreateOrder.FormatUseByDate.REQUEST); // Attempt at referencing the REQUEST struct equivalent
}
}
但是,我不确定如何引用
类
,它将用作枚举中的结构
等价物,以及它们是否可以在枚举体中定义。如果我真的需要CreateOrder.UpdateOrder.Response
之类的内容,我可以编写这样的内容,但您应该知道,Swift中干净的东西在Java中可能不干净
import java.util.Date;
public final class CreateOrder {
private CreateOrder() {}
public final class FormatUseByDate {
private FormatUseByDate() {}
public class Response {
public Date date;
@Override
public Object clone() throws CloneNotSupportedException {
Object cloned = super.clone();
//...
return cloned;
}
}
public class Request {
public Date date;
@Override
public Object clone() throws CloneNotSupportedException {
Object cloned = super.clone();
//...
return cloned;
}
}
public class ViewModel {
String date;
@Override
public Object clone() throws CloneNotSupportedException {
Object cloned = super.clone();
//...
return cloned;
}
}
}
}
您可能需要为每个赋值调用
clone()
(包括将参数传递给方法)来模拟Swiftstruct
的值语义,这可能是您重新查看实际用例而不是尝试将apple转换为apple的情况之一。你到底想干什么?为什么“FormatUseByDate”需要嵌套在CreateOrder中?在Swift中,没有案例枚举经常用作命名空间。您不应该将它们转换为Javaenum
。我不明白你为什么需要UseCase
这个东西。我试图创建一个数据结构,在整个代码中可以方便地作为数据模型引用。这是一种实现干净体系结构的尝试。FormatUseByDate只是一个例子。因此,数据结构旨在以这种方式使用UseCase.Something.Request、UseCase.Something.Response或UseCase.Something.ViewModel。因此,代替FormatUseByDate,它可以是例如EditOrder或UpdateOrder等。其他示例可以是例如CreateOrder.EditOrder.Request、CreateOrder.UpdateOrder.Response或ShowOrder.GetOrder.ViewModel。这并不意味着您需要Javaenum
。但如果你有自己的方式。按照你的方式去做,不要发布问题。正如OOPer提到的,没有案例enums=namespace。名称空间的Java概念是包。因此,package CreateOrder.FormatUseByDate;公共类请求{public Date;}
感谢OOPer演示了如何实现它。我将尝试使用Java包。