加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何避免使用getter并避免对UI进行硬编码?

发布时间:2020-12-15 08:39:32 所属栏目:Java 来源:网络整理
导读:我想在控制台上打印一个战士的描述,其中包括战士的力量和战士的武器,形式为 description战士使用武器例如:这个强大的战士使用黄油刀. 为清晰起见进行编辑:我想通过使用getter或任何其他显示对象内部实现的方法(如toString)来查询数据对象而不执行此操作.我
我想在控制台上打印一个战士的描述,其中包括战士的力量和战士的武器,形式为< description>战士使用<武器>例如:这个强大的战士使用黄油刀.

为清晰起见进行编辑:我想通过使用getter或任何其他显示对象内部实现的方法(如toString)来查询数据对象而不执行此操作.我还想在不将当前UI(控制台)硬编码到对象本身的情况下执行此操作.

public class Warrior
{
  private String description;
  private Weapon weapon;

  public Room(String description,Weapon weapon)
  {
    this.description = description;
    this.weapon = weapon
  }
}

public class Weapon
{
  private String name;

  public Weapon(String name)
  {
    this.name = name;
  }
}

避免吸气

我可以通过对UI进行硬编码来避免使用getter:

//Warrior class
public void display() 
{
  String.out.println("This " + description + " warrior uses a ");
  weapon.display();
}

//Weapon class
public void display() 
{
  String.out.print(name);
}

避免硬编码的UI

我可以通过使用getter来避免使用硬编码的UI:

//Warrior class
public String getDescription() 
{
  return "This " + description + " warrior uses a " + weapon.getName();
}

//Weapon class
public String getName() 
{
  return name;
}

有可能避免两者吗?我怎么能在上面的例子中这样做?

注意:响应一些初始答案,getter不是遵循命名约定getSomeFieldName的方法.因此,将getSomeFieldName重命名为aMethodThatIsNotPrefixedByGet不是解决方案. getter是一种将私有数据从对象传递到调用它的作用域的方法.

要完全清楚,我在这里要解决的问题是数据封装(因为这个问题被标记).如何防止将数据传递给不需要知道该数据但仍然难以对UI进行硬编码的对象?

另外,基于on these questions,我认为toString不应该以许多答案所建议的方式使用. toString似乎用于生成用于调试的对象的文本表示等,而不是用于返回任意输出,尤其不用于返回依赖于应用程序的输出.

解决方法

是的,去 i18n,

messages.properties
displayMessage = This {0} warrior uses a {1}

messages.properties_en_US
displayMessage = This {0} warrior uses a {1}

public static String getString(String key,Object... params  ) {
        try {
            return MessageFormat.format(RESOURCE_BUNDLE.getString(key),params);
        } catch (MissingResourceException e) {
            return '!' + key + '!';
        }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读