daR*_*ker 7 java oop optimization
所以我刚看到这个代码在工作,作者告诉我这是内联优化.
Class Test{
...
void init(){
//sets variables, call functions, etc
}
...
}
Run Code Online (Sandbox Code Playgroud)
然后他像这样称呼它
Test t=new Test();
t.init();
Run Code Online (Sandbox Code Playgroud)
而不是使用带有init()代码的默认构造函数.他告诉我这是内联优化.它是否正确?怎么更快?我在哪里读到这个?
chi*_*ity 14
它并不快.它似乎是基于一个方法可以内联但构造函数不能内联的假设.不幸的是,这是无稽之谈,所以它的全部观点都在窗外.
即使这个更快,但几乎肯定是一个坏主意.代码不应以牺牲可读性为代价进行优化,除非在每个最后一个CPU周期都很关键的极端情况下,在这种情况下,您不太可能使用Java.
事实上,这比仅仅更难阅读更糟糕.下一次重构将不可避免地是Test构造函数调用该init()方法,因此它并不总是必须手动完成(如果它被遗忘,手动执行它是一个痛苦和潜在的错误来源); 如果构造函数调用可以被覆盖的方法,这是不好的做法,因为子类可能无意中改变了在调用超类构造函数时构造时发生的事情(有关更多详细信息,请参阅此问题).当发生这种情况时,Test同一个包中的子类将能够覆盖该init()方法,然后当子类super()隐式或显式调用时,超类的构造函数将最终调用被覆盖的 init().(这个特殊的问题可以通过声明init()来消除private.)
不要这样做.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |