Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/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
如何将包含结构的嵌套枚举从Swift转换为Java?_Java_Swift_Struct_Enums - Fatal编程技术网

如何将包含结构的嵌套枚举从Swift转换为Java?

如何将包含结构的嵌套枚举从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

我正在尝试将以下Swift 4.1.2代码转换为Java1.5或更高版本。我有包含各种结构的嵌套枚举

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()
(包括将参数传递给方法)来模拟Swift
struct

的值语义,这可能是您重新查看实际用例而不是尝试将apple转换为apple的情况之一。你到底想干什么?为什么“FormatUseByDate”需要嵌套在CreateOrder中?在Swift中,没有案例枚举经常用作命名空间。您不应该将它们转换为Java
enum
。我不明白你为什么需要
UseCase
这个东西。我试图创建一个数据结构,在整个代码中可以方便地作为数据模型引用。这是一种实现干净体系结构的尝试。FormatUseByDate只是一个例子。因此,数据结构旨在以这种方式使用UseCase.Something.Request、UseCase.Something.Response或UseCase.Something.ViewModel。因此,代替FormatUseByDate,它可以是例如EditOrder或UpdateOrder等。其他示例可以是例如CreateOrder.EditOrder.Request、CreateOrder.UpdateOrder.Response或ShowOrder.GetOrder.ViewModel。这并不意味着您需要Java
enum
。但如果你有自己的方式。按照你的方式去做,不要发布问题。正如OOPer提到的,没有案例enums=namespace。名称空间的Java概念是包。因此,
package CreateOrder.FormatUseByDate;公共类请求{public Date;}
感谢OOPer演示了如何实现它。我将尝试使用Java包。