(original) (raw)

I've noticed something disturbing about service loader...
I thought its iterator returned a new object by default,
so i made a protected method in my abstract class to serve as a "constructor" and i thought i was done.

A simple system.out.println reveals the horrible truth.

util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.ZipExtractor@1e6ac83
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82

util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82

util.io.compressed.ZipExtractor@1e6ac83
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.ZipExtractor@1e6ac83

util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82
util.io.compressed.RarExtractor@1ca3f82

So no way to specify that object returned by the iterator should always be new? This should at least be specified in large and bold letters.

Preferably a setting with default create a new object would be better.