假设我有一只动物,现在我想把它变成一只狗.我如何在java中执行此操作?
现在我有一个看起来像的构造函数
public Dog(Animal animal) {
this.setProperty(animal.getProperty);
...
}
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它很脆弱.还有其他建议吗?
我遇到了一个具有挑战性的问题,这个问题一直无法解决 - 希望到现在为止.我正在开发自己的框架,因此试图为用户提供所有代码复杂性的灵活性.
首先,我有一个用户可以实现的抽象基类,显然简化了:
class IStateTransit
{
public:
bool ConnectionPossible(void) = 0;
}
// A user defines their own class like so
class MyStateTransit : public IStateTransit
{
public:
bool ConnectionPossible(void){ return true; }
}
Run Code Online (Sandbox Code Playgroud)
接下来,我定义一个工厂类.用户可以注册自己的自定义状态传输对象,稍后通过使用他们选择的字符串标识符来引用它们:
class TransitFactory : public Singleton<TransitFactory>
{
public:
template<typename T> void RegisterStateTransit(const string& name)
{
// If the transit type is not already registered, add it.
if(transits.find(name) == transits.end())
{
transits.insert(pair<string, IStateTransit*>(name, new T()));
};
}
IStateTransit* TransitFactory::GetStateTransit(const string& type) const
{
return transits.find(type)->second;
}; …Run Code Online (Sandbox Code Playgroud) 我有类属性和值。我不知道如何克隆列表中的项目值。
public class Attribut : ICloneable
{
public Attribut()
{ }
public Attribut(List<Values> value)
{
this.Values = value;
}
public object Clone()
{
return this.MemberwiseClone();
}
//other members
List<Values> values = new List<Values>();y
public List<Values> Values
{
get { return values; }
set { values = value; }
}
}
[Serializable]
public class Values : ICloneable
{
public Values()
{
}
public Values(string name)
{
this.Name = name;
}
public Values(string name, int count)
{
this.Name = name;
this.Count = …Run Code Online (Sandbox Code Playgroud) 我是一个项目的唯一开发人员,我在多个计算机上工作,一些在VM上工作.在gitHub上执行我的repo的git clone后,对reflog的调用只显示克隆后的项目.如何更新这个新的克隆仓库以显示完整的历史记录?
我正在尝试实现 .cpp 文件中的 .h 文件中的虚拟函数。这是一个作业,所以我不能仅仅使该函数成为非虚拟函数。这是一个克隆函数,它调用类的复制构造函数。功能:
virtual Item* clone() const;
Run Code Online (Sandbox Code Playgroud)
在课堂上
Ingredient : public Item {
Run Code Online (Sandbox Code Playgroud)
当我在 Ingredient.cpp 文件中实现它时,我有:
Ingredient::clone () const {
return new Ingredient ( *this );
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译时,出现以下两个错误:
Ingredient.cpp:23:13:错误:C++ 需要所有声明的类型说明符
Ingredient::clone () const {
^
Run Code Online (Sandbox Code Playgroud)
Ingredient.cpp:24:9:错误:无法使用“Ingredient *”类型的右值初始化“int”类型的返回对象
return new Ingredient ( *this );
^~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
产生 2 个错误。
我不明白我在这里做错了什么,因为我应该使用取消引用的 *this self 指针。有什么建议么?
我有一个问题,使用C#,如果我初始化一定名单,可以说List<T> exampleList使用其他预先存在的列表,可以说toModify这样的:List<T> exampleList = new List<T>(toModify)。当我稍后修改toModify列表时,新创建的列表也会修改自身。如果通过由基准的值不应该的值exampleList保持不变,因为它是从其他的一个产生的?
TLDR:当我更改第二个列表时,我使用另一个列表(第二个列表)初始化的列表的值会发生变化。我来自 Java 背景,无法理解为什么会发生这种情况。我总是必须使用克隆吗?
我有两个正在运行的docker容器.一个容器有MySQL数据,另一个容器有Tomcat中的Java Web应用程序.
如何使用数据将MySQL容器克隆到另一个Docker主机?
尝试保存/加载方法.但没有成功,因为没有数据
但Java Web应用程序容器正在运行
在我的Java应用程序中我有
BlockingQueue<HashMap<Integer, double[]>> q
Run Code Online (Sandbox Code Playgroud)
我该如何克隆它?
尝试实现深度复制,但是当我在 main 中使用 equal() 测试我的方法时,尽管所有数据都是相同的,但结果却是错误的。
这是我的克隆方法:
@Override
public Object clone() { try {
// shallow copy
BankAccount clone = (BankAccount)super.clone();
// deep copy
clone.createDate = (java.util.Date)(createDate.clone());
return clone;
}
catch (CloneNotSupportedException y) {
return null; }
Run Code Online (Sandbox Code Playgroud)
这是我的主要测试:
public static void main(String[] args) {
BankAccount account1 = new BankAccount(1111, 5347);
BankAccount account2 = (BankAccount)account1.clone();
System.out.println(account2.equals(account1));
Run Code Online (Sandbox Code Playgroud) 我想生成一个进程并使用 stdin/out 与其进行通信。这一切都有效,但我注意到当孩子通过信号终止时,父母也会这样做。下面是一个例子。如果取消注释 true,程序将打印“完成”。如果您编译并取消注释 selfterm,则它不会,并且父进程将终止并退出代码 137。为什么父进程会终止以及如何阻止它?
主程序
#include <signal.h>
#include <sched.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
int doexec(void*) {
//char*bin = "/usr/bin/true";
//char*bin = "/tmp/selfterm";
char*args[] = {bin, 0};
int err = execv(bin, args);
return err;
}
int main(int argc, char *argv[]) {
int pid = clone(doexec, malloc(2*1024*1024)+2*1024*1024, CLONE_VFORK|SIGCHLD, 0);
int status=0;
wait(&status);
puts("Finish");
}
Run Code Online (Sandbox Code Playgroud)
selfterm.c
#include<signal.h>
int main(int argc, char *argv[]) { kill(0, 9); }
Run Code Online (Sandbox Code Playgroud)