Java优化。转换或实例化新对象

时间:2017-05-07 20:29:21

标签: java optimization

此问题可能与另一个How much processing and memory use does casting take in Java?

有关

我知道Java优化不是一个非常讨论的主题。我也意识到编写可读和可维护的代码比编写粗略的单行代码更重要。我同意他们说'#34;你不应该关心演员的费用"事实上,我只关心编写遵循重要原则的代码,如SOLID,KISS,DRY,我非常关心测试,YAGNI等......但是当我在业余时间出现这个问题时我想起了这个问题。正在考虑代码本身,我无法自己回答。

现在的事情是我使用Iterator模式的自我实现,并且我将它与Aggregate接口结合以实现多态。

这是我用ObjectAid做的一个简短的UML。 enter image description here

如您所见,我有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(); 不是实例化。

0 个答案:

没有答案