我正在创建一个游戏并且我已经封装了我的所有数据,这显然意味着如果我想从该类的实例中获取某些内容,我必须调用一个 getter 方法。我有一个每秒被调用多次的渲染循环。我必须多次调用同一个 getter 方法才能从对象中获取单个字段并用它做多项事情。仅存储对我在需要它的类中不断抓取的对象的额外引用会更好吗?在这种情况下,我可以在构造函数中抓取它并完成。这有意义吗?万分感谢。
我同意另一个发布的答案,即没有性能差异。
但是,我认为该答案中关于可读性和最佳实践的讨论都误解了 OP 的问题。他并不是在问他是否可以避开最佳实践而不使用 getter。他问他是否可以/应该创建对检索到的对象的本地引用,而不是在每一行上调用 getter,在我的世界中,这是标准做法,确实更具可读性。
首先考虑:
doFooThings(service.getFoo());
doBarThings(service.getFoo().getBar());
doBazThings(service.getFoo().getBar().getBaz());
doMoreBazThings(service.getFoo().getBar().getBaz());
doOneLastAmazingBazThing(service.getFoo().getBar().getBaz());
Run Code Online (Sandbox Code Playgroud)
相比于:
Foo myFoo = service.getFoo();
doFooThings(myFoo);
Bar myBar = myFoo.getBar();
doBarThings(myBar);
Baz myBaz = myBar.getBaz();
doBazThings(myBaz);
doMoreBazThings(myBaz);
doOneLastAmazingBazThing(myBaz);
Run Code Online (Sandbox Code Playgroud)
第二个版本更具可读性,尤其是在现实世界中,当代码中有更多的噪音和缩进时,更容易阅读引用具有描述性命名的局部变量的简洁行,而不是看到相同的 getter 调用出现连续十几次。