【问题标题】:How to reference a constructor without resetting parameter values如何在不重置参数值的情况下引用构造函数
【发布时间】:2018-06-09 11:38:14
【问题描述】:

仅供参考,我上过一堂关于 Java 的高中课程,所以这个问题应该非常容易回答。我只是在想办法将类方法(构造函数)作为新对象调用而不为参数输入新值时遇到了麻烦。构造函数如下所示:

public Skills(int courage, int intelligence, int stamina, int crafting, 
int blacksmithery, int herbalism, int slingSkill, 
int bowSkill, int swordSkill, int armor, int stealth, int 
lifeForceSkill){
    this.courage = courage;
    this.intelligence = intelligence;
    this.stamina = stamina;
    this.crafting = crafting;
    this.blacksmithery = blacksmithery;
    this.herbalism = herbalism;
    this.slingSkill = slingSkill;
    this.bowSkill = bowSkill;
    this.swordSkill = swordSkill;
    this.armor = armor;
    this.stealth = stealth;
    this.lifeForceSkill = lifeForceSkill;

} 当我建立它时,我的主要方法是这样做:

Skills skills = new Skills(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);

将所有级别设置为 1,然后我就有了以后可以使用的对象技能。 (我是不是把构造函数和对象这两个术语弄混了?如果有错,请在你的脑海中将它们全部转换,我认为我至少与它保持一致)。

问题是我在技能类中有一个 toString() 方法,我想在主类中的一个单独方法中调用它。

else if (optionChoice.equalsIgnoreCase("View Skills")){
    Skills skills = new Skills();
    System.out.println(skills.toString());
    break;
}

当然,我在这里创建的对象会引发错误,因为我不能只写 Skills();没有为参数输入所有十二个值。那么,当我无法为其创建对象时,如何从 Skills 类中调用该方法呢?值不改变的功能是必不可少的,因为它们是可变的并且随着程序的变化而变化,我不能为它们输入任何值。

我知道这可能是一个超级基本的问题,但这是我的水平,所以任何超级基本的答案都会有所帮助。不应该占用你太多时间。提前致谢!

【问题讨论】:

  • 我不小心先在软件开发网站上发布了这个,所以这是那个的精确副本。
  • 你必须在你的技能类中重写 toString() 方法。
  • 用一个什么都不做也不带参数的构造函数重载构造函数。 - 公共技能(){}
  • 你可能想看看static-fields
  • @Enoch 你是在问如何将一个对象作为参数传递给另一个函数?

标签: java object methods constructor call


【解决方案1】:

skills 声明为成员变量,通常称为字段(在主变量之外),然后像现在一样初始化它。然后你可以在你类中的任何方法中使用skills. toString() 访问它。

【讨论】:

    【解决方案2】:

    Overload 具有默认功能的构造函数。

    public Skills() {
         this (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
    }
    

    但是,如果 Object 本身不代表任何东西,并且只是为了访问 toString 方法而实例化,则应该创建一个 Static 方法。静态方法可以通过调用类本身而不是对象来访问。虽然这在很大程度上取决于您的预期目的。

    public static toStaticString() {
        return "Static String";
    }
    

    如果您希望始终保留 Skills 对象,则需要传递该对象并调用其上的方法。请记住,实例化技能会创建一个新的“实例”,它将记住属于它的每个技能的各种值。更多关于这方面的内容。

    注意:短语“实例化一个类”与“创建一个对象”含义相同。当您创建一个对象时,您正在创建一个类的“实例”,因此“实例化”一个类。 - Java Docs

    【讨论】:

      【解决方案3】:

      在你的主要方法中,如果你想保留它的值,你的“技能”对象应该被传递。您当前所做的是每次调用函数时都创建一个新对象(构造一个)。

      您想要的流程如下。

      Skills skills = new Skills(...);
      .... 
      skills.toString();
      

      就像你说的,如果你想在你的主类的另一个方法中使用技能对象,只需将技能对象传递给那个方法。像这样:

      public static void main (String args[]) {
          Skills skills = new Skills(....);
          fooMethod(skills);
      }
      
      fooMethod(Skills skills) {
          // Here you can :
          skills.toString();
      }
      

      【讨论】:

        【解决方案4】:

        这是另一个答案,因为我还没有看到任何人发布关于它的帖子。

        通常,有许多编程语言模式可以解决许多不同的问题。 其中之一是Builder 模式,当有许多参数要传递给构造函数时,它被用作修复。现在,我不希望您感到困惑或任何您指定的事情,到目前为止您只参加了 1 个 Java 课程,但如果您想了解更多信息,您可以谷歌“java builder pattern”或在一段时间后获得更熟悉 Java,你可以阅读 Joshua Bloch 写的名为 Effective Java 2nd Edition 的非常好的书,其中有一章是关于 Builder 模式和许多其他有用的东西,你最终会如果您选择编程职业,则需要。

        【讨论】:

          猜你喜欢
          • 2018-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-27
          • 2015-05-25
          • 1970-01-01
          • 1970-01-01
          • 2016-12-20
          相关资源
          最近更新 更多