Java - 当您拥有的只是引用类型时实例化类型 X 的对象

标签 java interface copy types

我快速浏览了建议的“相关问题”,但找不到与我所问问题直接相关的问题。即使有,我仍然很感激您对实现这一目标的最佳方法的意见。

首先一些背景信息。
我正在努力扩展 Java 应用程序,并且有以下接口(interface)和类:

public interface Mapper {
  public void foo();
}

public class SomeGrammar implements Mapper {

  public SomeGrammar() {}

  public SomeGrammar(SomeGrammar toCopy) {
    //Copy specific fields
  }

  public void foo() {}
}

我使用的应用程序在构建时只考虑了一种语法类型,SomeGrammar,因此 SomeGrammar 类贯穿整个应用程序。

SomeGrammar 对象通常使用复制构造函数进行复制:

SomeGrammar aGrammar = new SomeGrammar();
SomeGrammar newGrammar = new SomeGrammar(aGrammar);

我正在尝试实现新类型的语法。因此,我打算提取核心方法并实现一个 Grammar 接口(interface),甚至将这些方法合并到 Mapper 接口(interface)中。所以所有的语法类都会实现这个接口(interface)。

<小时/>

无论如何,我的问题是,替换上述行的最佳方法是什么,以便我可以概括接口(interface)类型当前引用的任何语法对象的复制?

显然我不能

Grammar newGrammar = new Grammar(aGrammar);

因为 Grammar 是接口(interface)的类型,并且 new Grammar(aGrammar) 没有任何意义。我想我可以在我的界面中添加一个克隆方法来代替复制构造函数,但正如我之前所说,我很感激您对此事的看法。

提前致谢,
欧因

最佳答案

如果我正确理解你的问题,我的解决方案将如下所示:

假设我们希望创建 3 个具体语法:GrammarA、GrammarB 和 GrammarC。我们将定义每个类来实现 Grammar 接口(interface)。 GrammarInterface 将定义 foo() 函数和 doCopy() 函数。然后,每个具体的 Grammar 类将负责实现 foo() 功能,并通过调用复制构造函数返回自身的副本。这是您要找的吗?

interface IGrammar { 

    public void foo();
    public Grammar doCopy();

}

class GrammarA implements IGrammar { 

    public Grammar doCopy(Grammar g) { 

        return new GrammarA(g);

    }

}

关于Java - 当您拥有的只是引用类型时实例化类型 X 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689448/

相关文章:

Java 8 供应商没有双冒号

Java 类字段定义

java - 滑动菜单适配器(android)

c# - 通用接口(interface)列表

尝试运行 camus 时出现 java.lang.ClassNotFoundException

java - 限制Java子接口(interface)中的泛型类型

java - 如何判断接口(interface)中的方法何时被调用

javascript - 如何获取 html 元素运行时代码来制作通用副本?就像复制文本框并输入其中的文本一样

javascript - 为什么更新一个对象中的属性会更改另一个对象?

arrays - 在 scala 中更改列表类型的最佳方法