java - 将 "shorthand"写入对象 : The hows and whys? 内的字段的引用

标签 java

这里是第一个问题,所以希望我现在没有犯​​太多失礼

快速版本:我想通过为对象聚合中的任意(但已知)字段创建“简写”来节省键入时间。 (我认为我说得对——仍然掌握某些术语)

我不确定是否有更好/更准确的术语来描述我在这里寻找的内容,而且我遇到的任何内容都没有在 Java 中特别提到这个概念(尽管我可能完全错过了我的文章中的一些关键内容)搜索,我觉得尽管我熟悉 Java,但这个问题总体上可能对 OOP 世界更开放)。

我很确定,如果我厌倦了写作,请说:

MyClass myClass = new MyClass();
// ... more code ....

// This is a specific string I need to print out for "Foo"
if(reasonToFoo) {
    System.out.println(myClass.getSomeObject().getSubObject1().getDescription());
}

我觉得我有两个选择:我可以在同一个类中创建一个小辅助函数来“包裹”丑陋的对象引用链,使我以后输入起来更简单:

public String getFooString() {
    return this.getSomeObject().getSubObject1().getDescription();
}

// ... elsewhere ...
if (reasonToFoo) {
    System.out.println(getFooString());
}

我的替代方案是创建一个辅助对象,其唯一目的是简化对同一字符串的抓取

class FooString {
    public static String getFrom(MyClass mC) {
        return mC.getSomeObject().getSubObject1().getDescription();
    }
}

// ... elsewhere ...
if(reasonToFoo) {
    System.out.println(FooString.getFrom(this));
}

我的问题是:

  1. 我的方法是否有效地解决了问题的“如何”?例如,我在我的解决方案中是否采用了合理的 OOP 实践?
  2. 我很难看到很多“为什么”的案例——为什么我想使用一种版本来处理这个问题而不是其他任何版本?这些实现中的任何一个本质上都比其他实现更差吗?
<小时/>

[编辑]:刚刚意识到我可能不应该直接访问 MyClass 实例中的对象,而应该通过 getter 来访问。相应编辑

<小时/>

背景:自 2000 年代初期以来,我就开始涉足以各种形式和语言编写代码(从 TI-83 BASIC 开始,扩展到那个时期的一些基本 HTML/JS/CSS,在转向 Java 和 Python 之前,我曾使用过 ActionScript 3 和 mIRC 脚本),现在是一名 28 岁的大学新生,试图更好地掌握编程的设计方面,同时致力于独立游戏开发一份梦想的工作(意识到小隔间农场编程工作对于支付账单来说更现实)。

最佳答案

从面向对象的角度来看,您的代码违反了 Law of Demeter最好要求 myclass 本身提供所需的描述。引用此 blog .

如果在代码中它看起来像这样

public class A
{
    public void someMethod(B b)
    {
        b.getC().getD().getE().doThing();
    }
}

最好将其更改为

public class A
{
    public void someMethod(B b)
    {
        b.doThing();
    }
}

关于java - 将 "shorthand"写入对象 : The hows and whys? 内的字段的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110646/

相关文章:

java - 创建后增加 LRUMap 的大小

java - 运行 paint 方法时的默认颜色是什么

java - 使用 EL 将 Java Set 分配给 Javascript 数组

java - 如何使用 Jsch exec 在服务器内的文件上写入

java - 使用基于键列表的流过滤器映射

java - Spring中具有动态参数值的 Autowiring 类

java - 使用 JAXB 在 java 中解码 xml 属性和值

java - 如何为GridView列表添加ViewHolder?

每个循环的 Java 都被 PMD 标记为 UR 异常

java - 将 XML 解析/反序列化为 JavaObjects