Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 指的是宾语的宾语_Java_Oop_Object - Fatal编程技术网

Java 指的是宾语的宾语

Java 指的是宾语的宾语,java,oop,object,Java,Oop,Object,假设我们在一个对象内部,在另一个对象内部有一个对象,那么在两个对象外部检索私有变量值的最佳方法是什么 最简单的方法似乎是这样做: object1.object2.object3.getvalue(); 这可以接受吗?或者调用一个调用一个方法的方法会更好吗 第二个选项似乎不必要费劲,因为您基本上会在3个不同的类中创建相同的方法。使用getter获取任何对象 例如:objectobj=object1.getObject2().getObject3() 使用getter获取任何对象 例如:objec

假设我们在一个对象内部,在另一个对象内部有一个对象,那么在两个对象外部检索私有变量值的最佳方法是什么

最简单的方法似乎是这样做:

object1.object2.object3.getvalue();
这可以接受吗?或者调用一个调用一个方法的方法会更好吗


第二个选项似乎不必要费劲,因为您基本上会在3个不同的类中创建相同的方法。

使用getter获取任何对象


例如:objectobj=object1.getObject2().getObject3()

使用getter获取任何对象


例如:objectobj=object1.getObject2().getObject3()

object1.object2.object3.getvalue()

此链接似乎不正确…这种情况下的对象链接始终是object1.someMethod().someOtherMethod()。或者类似上面使用getter object1.getObject2().getObject3()的答案中建议的内容。
我希望它能有所帮助。

object1.object2.object3.getvalue()

此链接似乎不正确…这种情况下的对象链接始终是object1.someMethod().someOtherMethod()。或者类似上面使用getter object1.getObject2().getObject3()的答案中建议的内容。
我希望它能有所帮助。

您所描述的可能是最简单的方法(如果可以访问
object2
object3
),但这绝对不是一种可行的方法。正如Raaga指出的那样,getter检索类的成员要好得多,然后这些成员应该是
私有的
受保护的
,以防止出错

如果你能做到的话

object1.object2.object3.getvalue();
你也可以这样做

object1.object2 = null;
这很可能不是你想允许的。这是面向对象编程的基本概念之一。类应该处理它们的实现细节/秘密,而不是直接提供给外部!这就是getter/setter的作用

通过这种方式,您可以更好地控制访问以及可以做什么和不能做什么。如果您只能从
object1
检索
object2
,但不能更改它,则只能提供一个getter而不能提供setter

如果您还可以更改它,那么最好使用setter进行更多的控制,因为您可以检查setter,以防止我的示例将
null
指针作为
object2


为了防止您担心调用方法的效率可能不如直接访问成员的效率,您可以依靠Java对方法调用进行内部优化,使其不会比直接访问慢。

您所描述的可能是最简单的方法(如果可以访问
object2
object3
),但这绝对不是一个好办法。正如Raaga指出的那样,getter检索类的成员要好得多,然后这些成员应该是
私有的
受保护的
,以防止出错

如果你能做到的话

object1.object2.object3.getvalue();
你也可以这样做

object1.object2 = null;
这很可能不是您想要允许的。这是面向对象编程的基本概念之一。类应该处理它们的实现细节/秘密,而不是直接向外部提供它们!这就是getter/setter的用途

通过这种方式,您可以更好地控制访问以及可以做什么和不能做什么。如果您只能从
object1
检索
object2
,但不能更改它,那么您只能提供一个getter而不能提供setter

如果您还可以更改它,那么最好使用setter进行更多的控制,因为您可以检查setter,以防止我的示例将
null
指针作为
object2


为了防止您担心调用方法的效率可能不如直接访问成员的效率,您可以依靠Java对方法调用进行内部优化,使其不会比直接访问慢。

最好的方法是不要将对象视为数据存储。应该定义一个类来进行一些工作为此,需要一组相关的职责。为了执行这些工作以履行这些职责,可能会保留一些内部数据,并包含一些嵌套对象。一般来说,提供数据不应该是对象的目标

封装 in的整体思想是不公开内部数据和嵌套对象。相反,通过在更高/外部对象上声明方法来发布各种可用的琐事。封装使您可以在不破坏外部调用代码的情况下更改这些内部内容–避免脆弱性是目标

例如,
发票
对象可以包含
行项目
对象的集合。反过来,每个行项目对象包含产品、数量、价格、扩展成本、可征税性、税率、税额和行成本的其他对象。如果您想知道跨项目添加的增值税总额,而不是询问nvoice获取LineItem,然后向LineItem请求TaxAmount对象,将此任务定义为Invoice上的一个方法,
getTotalTaxAmount
。让该方法了解(并保持自身!)如何遍历包含的对象以收集相关信息

如果绝对必须公开嵌套数据,请再次在最高级别定义一个方法,返回所需数据的副本或所需对象的集合(可能是这些对象的副本)。同样,目标是避免公开对象中的对象

然后,在最高的方法中,如Raaga所述,定义一个调用getter的getter

Getter方法与直接成员访问 在一个非常简单的数据结构中,您可以直接访问对象。但通常最好使用getter方法。原因同样是封装。使用getter方法可以让您具有red的灵活性
Value value = object1.getFooValue();