这里的第一个问题,所以希望我现在不会犯太多失礼
快速版:我想通过为对象聚合中的任意(但已知)字段创建“简写”来节省输入时间。 (我想我说得对 - 仍然掌握某些术语)
我不确定我在这里找到的是否有更好/更准确的术语,我所遇到的任何内容都没有在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));
}
我的问题是:
[编辑] :刚刚意识到我可能不会直接访问MyClass实例中的对象,而是通过getter来访问。相应编辑
背景:自21世纪初以来,我一直在编写各种形式和语言的代码(从TI-83 BASIC开始,通过那个时期的一些基本HTML / JS / CSS扩展,移动使用ActionScript 3并在mIRC中编写脚本,然后再转到Java和Python)并且现在是一名28岁的大学新生,试图更好地掌握编程的设计方面,同时倾向于独立游戏开发一个梦想的工作(意识到一个小隔间农场编程工作对于支付账单更为现实)。
答案 0 :(得分:1)
从面向对象的角度来看,您的代码违反了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();
}
}