Because we need to call `setDefault` in `Metadata.setParams`, I can't leave it as `protected`. But I think it is important to keep the extensibility. And I think we can't make it as `public` too. I add object `Params` and use it to help us update default param of a `Params`.         