I am not 100% convinced that this is better. The reason is the "Type" class just defined two abstract functions but the functions are not carried all the way to rollups. How about making Histograms, Basic stats and SimpleNumber all extend Rollup.Type? SimpleNumber would then have no-op implementations (or throw RuntimeException) for buildFromRawSamples and buildFromRollups. I am just thinking out loud.