java - 这是对 'this' 关键字的不明智使用吗?

标签 java variables this scope

基本上,我有一个名为 WarriorSkills 的类,我想根据 Warrior 对象武器统计数据更新技能造成的伤害。我能想到的获得对战士类对象的引用以根据战士武器对象(伤害和强度)改变战士技能统计数据的唯一方法是使用战士类的参数作为该方法WarriorSkills 类中的 getRoughSkillDamageModified()。

头等舱

public class WarriorSkills extends Skills {
private int rageCost;
private double damageModified;

public void getRoughSkillDamageModified(Warrior plc) //By Armour/Weapon stats
{
    damageModified = plc.getWeapon().getAverageDamage() + plc.getStrength();
}

public void updateStats()
{
    this.setStrength(this.getStrength() + this.warriorWeapon.getBonusStrength());
    this.skills.getRoughSkillDamageModified(this);
}

二等

public class Warrior extends StrengthUser {

private String className = "Warrior";
private StrengthWeapon warriorWeapon;
private WarriorSkills skills;

public Warrior(Warrior originalObject)
{
    super(originalObject);
}

public Warrior(int stam, int health, int resi, int str, int rage, StrengthWeapon 
warrWep, WarriorSkills warSkill)
{
    super(stam, health, resi, str);
    this.skills = warSkill;
    this.warriorWeapon = warrWep;
}

public String getClassName()
{
    return className;
}

public void updateStats()
{
    this.setStrength(this.getStrength() + this.warriorWeapon.getBonusStrength());
    this.skills.getRoughSkillDamageModified(this);
}


public StrengthWeapon getWeapon()
{
   return this.warriorWeapon;
}

public WarriorSkills warriorSkills()
{
    return this.skills;
}

}

但是正如你所看到的,为了调用这个方法(在 Warrior 类中)我必须使用 'this' 代表 Warrior 类,既作为调用对象又作为参数传递。现在,“this”关键字的使用对我来说似乎有点奇怪,但似乎确实有效。它是否被惯例或其他什么避免了,或者是否有任何潜在的问题。我的书似乎还没有告诉我,我总是喜欢尝试。

更新了完整的类定义。注意 Warrior 类继承自 StrengthUser 类,而 StrengthUser 类又继承于 PlayerClass 类。而 WarriorSkill 继承自 Skill 类。 编辑:该死的忘了省略摆弄代码=/ Bleh 再次更新, self 注意:不要在提出问题和发布完整类(class)之间摆弄代码。问题首先涉及的方法调用丢失了,哈哈。现在又出现了。

最佳答案

示例代码中所有使用 this. 的地方都是不必要的。然而,这是否“明智”取决于你。

这是一个见仁见智的问题。

有些人认为使用 this. 可以提高可读性,从而明确您正在使用/调用的字段或方法是目标类的成员。我认为它没有帮助,除了 Java 初学者。

但是,在某些情况下,有必要使用 this 进行限定;例如

public class Example {
    private int field;
    public void setField(int field) {
        this.field = field;  // 'this' is required here ...
    }
}

如果您询问...skills.getRoughSkillDamageModified(this),将当前对象的引用作为参数传递给其他方法或构造函数绝对没有“不明智”的地方。

关于java - 这是对 'this' 关键字的不明智使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25214070/

相关文章:

java - 这个关键词指的是什么?

javascript - 火狐这个功能

javascript - 'this' 返回数组而不是字符串。 JavaScript

java - Hibernate Envers 不生成审计表

java - 无法在 Recycler View 中从一项 Activity 转到另一项 Activity

perl - Perl 变量声明的正确方法

javascript - 重复数组

java - freemarker.template.TemplateException : Expected hash 错误

java - 如何为注释类型编写可选的默认注释值

c - 未找到静态字符数组且无法与 strncpy 一起使用?