Да - java.util. Свойства - это боль, которую можно извлечь.
На данный момент давайте оставим в стороне тот факт, что он является производным от java.util.Hashtable для начала (что означает, что он имеет get(Object)
и put(Object, Object)
, несмотря на тот факт, что свойства всегда являются строками ...
Однажды я создал подкласс java.util.Properties для обеспечения своего рода иерархической структуры - в файле свойств, который у меня был:
x.y.z = 10
a.b.c = 10
и вы можете задать свойства "master" для "x" (с новым вызовом метода), и это даст вам другой объект свойств, который будет эффективно содержать "yz = 10" и т. Д. Это было удобно для подкласса java.util Свойства, как и многие другие части кода, уже знают используемые свойства. Если бы он реализовал интерфейс, я бы не подкласс, и у меня не было бы никаких проблем: (
В любом случае, мне нужно было переопределить getProperty (), чтобы при необходимости вернуться к родительским свойствам. Но есть две перегрузки - что мне переопределить? GetProperty (String) вызывает getProperty (String, String) или наоборот? Может быть, мне нужно только переопределить get ()? Это не задокументировано, и если я переопределю только один из них, реализация может измениться в более поздней версии, чтобы изменить положение вещей, поэтому мне нужно было переопределить оба из них.
То же самое относится и к различным другим методам (сохранение и загрузка были проблемой, IIRC - это было давно). В принципе, я мог бы сделать эту работу проще, если бы мог полагаться на то, что реализация свойств не изменилась - но, очевидно, было бы труднее Sun улучшить реализацию на более позднем этапе.
Во всяком случае, это был определенный пример, где состав и представление интерфейса, на который клиенты могли бы положиться, были бы намного лучше.