【问题标题】:Easy way to create an object from base class从基类创建对象的简单方法
【发布时间】:2016-01-03 13:50:08
【问题描述】:

假设我们有:

class A {
}

还有

class B extends A {

  B(A object) {
    this = object; //this is not possible.
  }
}

正如我们所知,我们不能为 Java (this) 中的关键字设置任何值。是否有任何简单的方法可以创建与 A 对象具有相同字段值的 B 对象?

【问题讨论】:

  • 你的意思是如何创建一个拷贝构造函数最简单的方法?
  • 是的。这是太荒谬的问题吗?我得到了负分
  • 我不认为这很荒谬,但看起来你甚至没有尝试过。我只需在基类和子类中创建复制构造函数调用super(a);。现在,如果您天真地问我应该手动生成几个字段的副本吗?答案是:确保通过手动或代码生成工具完成,但代码必须存在。
  • 我尝试并搜索了很多。但是我没有找到任何东西,我问了。然后我得到了负面评价:) 我想这可能是因为这为我们提供了如此简单的语法。

标签: java object constructor this


【解决方案1】:

最简单的方法是一个一个地复制所有字段。没有更简单的方法。您可以编写一个工具来为您生成此代码。一般来说,这在 Java 中是可以避免的(可能是因为它很痛苦且容易出错),并且如果没有更简单的解决方案来解决您的问题,通常会使用委托。即通常有一个替代方案。

【讨论】:

  • 嗯,我明白了。顺便说一句,Java 有没有像 C# 一样的 : new A() { this.f = f, ... } 语法?
  • @user14570 这严重表明您必须学习 Java 的基础知识。如果您不花时间学习基础知识,请不要急于完成某件事。
【解决方案2】:

这不能作为变量工作,这是最后一个变量。所以你可以这样做:

public class A {

       private String hello;
       private String something;

       public A(String hello, String something){
          this.hello = hello;
          this.something = something;
       }

       public String getHello() {
          return hello;
       }

       public void setHello(String hello) {
          this.hello = hello;
        }

        public String getSomething() {
           return something;
        } 

        public void setSomething(String something) {
          this.something = something;
        }

}

然后您可以在 B 中使用 A 类,如下所示:

  public class B extends A{

      public B(A object) {
         super(object.getHello(),object.getSomething());
      }

  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2018-01-10
    相关资源
    最近更新 更多