此问题可能与另一个How much processing and memory use does casting take in Java?
有关我知道Java优化不是一个非常讨论的主题。我也意识到编写可读和可维护的代码比编写粗略的单行代码更重要。我同意他们说'#34;你不应该关心演员的费用"事实上,我只关心编写遵循重要原则的代码,如SOLID,KISS,DRY,我非常关心测试,YAGNI等......但是当我在业余时间出现这个问题时我想起了这个问题。正在考虑代码本身,我无法自己回答。
现在的事情是我使用Iterator模式的自我实现,并且我将它与Aggregate接口结合以实现多态。
如您所见,我有Iterator
接口,其具体实现或实例化为ListIterator
。
另一方面,我有Aggregate
接口,它由我拥有的所有聚合类实现。在示例中,仅显示Documentos
。
所以问题是,当另一个聚合为Documentos的类将从他的Documentos属性调用Iterator iterator = documentos.createIterator();
时,它将获得一个ListIterator对象,是迭代器。然后,当谈到Documentos负责的项目集合(这就是为什么Documentos是一个集合,以及它为什么存在,这是他的目的)我会做类似于iterator.firstElement(); iterator.currentElement();
。
正如您所看到的,来自Iterator接口的currentElement()返回一个Object对象,因为真正发生的是ListIterator具有聚合属性或字段,以及委托" currentElement()&#34的内容;如下:
//In ListIterator:
public Object currentElement(){
aggregate.getElement(current);
}
和
//In Documentos
public Object getElement(int){
repository.findById(idDocumentos.get(int));
}
可以想象,存储库不是实例化纯Object类对象,而是让它调用它,DocumentoDomain。
所以我的问题是:我将不得不使用这些方法,我将不得不处理对象 - > DocumentoDomain始终投射。 以下哪种形式更为理想?
我们说我必须检索DocumentoDomain的名称。我可以从具有Documentos属性的类中找到:
Iterator iterator = documentos.createIterator();
iterator.firstElement();
DocumentoDomain doc = (DocumentoDomain) iterator.currentElement();
String docName = doc.getName();
或
Iterator iterator = documentos.createIterator();
iterator.firstElement();
String docName = ((DocumentoDomain) iterator.currentElement()).getName();
这对整体资源消耗有何影响?这真的很重要,或者只取决于我是否会使用那个"元素"是不是以后?
更新:正如评论中所述,我没有实现任何新对象。我真正在做的是创建一个现有的参考。这就在这里:
DocumentoDomain doc = (DocumentoDomain) iterator.currentElement();
不是实例化。