我快速浏览了建议的“相关问题”,但找不到与我所问问题直接相关的问题。即使有,我仍然很感激您对实现这一目标的最佳方法的意见。
首先一些背景信息。
我正在努力扩展 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/