java - 如何在不创建新对象的情况下更改对象的类?

标签 java

假设我有一个类 Foo,以及两个扩展 Foo 的类 Foo1 和 Foo2。

假设我有一个 Foo f,结果是一个 Foo1 ,并且我想在不使用构造函数的情况下更改它。如果只是更改 f 的字段,我可以手动完成:

f.field1= ..
f.field2= ..

但是如果我想把它变成 Foo2 该怎么办呢?

注意:重点是我想做这样的事情:

Foo f=new Foo1( ...);
Foo g=f;
g=new Foo2(...);

并且当 g 改变时 f 也改变,但显然这是行不通的。

最佳答案

你也许可以围绕这些思路做一些事情。注意:此代码是伪代码。

abstract class Common{
...
}

class Foo{
  private Common currentReference;

  public Foo(...){
    currentReference = new Foo1();
  }

  public Foo changeReferenceToClass(Class clazz){
    ...
    currentReference = clazz.newInstance();
    ...
    return this;
  }

  public <T extends Common> T getReference()
  {
    return (T) currentReference;
  }
}

class Foo1 extends Common{
...
}

class Foo2 extends Common{
...
}

Foo f=new Foo( ... );
Foo g=f;
g=g.changeReferenceToClass(Foo2.class);

它的作用是:

  • 创建一个类,其中包含对具有 common 接口(interface)的对象的引用(在示例中为 Common 抽象类。
  • 在构造时实例化对默认值的引用(示例中为 Foo1)。
  • 提供更改获取引用的方法。
  • 当您在一个位置将引用更改为 Foo2 时,您可以在所有位置访问它

在示例中,当您更改 g 以保存对 Foo2 的引用时,f 将保存对 Foo2< 的引用 也是如此。

关于java - 如何在不创建新对象的情况下更改对象的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23273235/

相关文章:

java - Hibernate 公式注释 - MySql 函数 : INTERVAL, DAY

java - 如何添加工具栏?

java - 从二维数组返回字符元素

java - 在 Java 8 中向 TreeMap 中的键添加多个值

java - 在 java 中将 html 转换为 doc

java - 不明白代码逻辑

java - 我如何从 JSP 调用 C++ 函数

java - java 新手 - 线程 “main” java.util.NoSuchElementException 中出现异常

java - Docker多阶段构建-为什么要在Docker中构建?

java - 找不到包 java.util.PropertyResourceBundle 的资源