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