【问题标题】:Referencing a constructor without resetting parameter values?在不重置参数值的情况下引用构造函数?
【发布时间】:2018-06-09 08:51:43
【问题描述】:

仅供参考,我上过一堂关于 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 类中调用该方法呢?值不改变的功能是必不可少的,因为它们是可变的并且随着程序的变化而变化,我不能为它们输入任何值。

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

【问题讨论】:

  • 这在 stackoverflow 上可能会更好,因为它的实现级别更高。问题,您是否打算创建一个新的Skills 对象只是为了做一个toString()?如果您对一开始创建的 on 进行更改,即使您要修复编译错误,您也不会看到它们。此外,System.out.println(skills) 也同样有效,因为println() 可以采用Object。对于Object,它会自动调用toString()

标签: java methods constructor object


【解决方案1】:

为什么不让你的技能对象成为一个静态字段,而不是在 main 方法中创建它?

public class WhateverYourClassIsCalled {
    static Skills skills = new Skills(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);

    public static void main(String[] args) {
        // ...
    }

    void yourOtherMethod() {
        // ...
        else if (optionChoice.equalsIgnoreCase("View Skills")) {
            System.out.println(skills.toString());
            break;
        }
    }
}

【讨论】:

  • 或者您可以通过传递所需的方法来避免静态全局变量:yourOtherMethod(skills);
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 2016-12-20
  • 2014-05-02
  • 2021-05-29
相关资源
最近更新 更多