Я почти уверен, что ответ где-то есть, но либо ему не хватает правильных ключевых слов, либо просто нужно немного поспать, но вот оно; ~):
Мне нужно расширить BufferedImage иЕдинственный способ сделать это без MacGyvering всего класса - это оставить новый класс в java.awt.image, потому что он содержит поле, доступное только для пакета, к которому мне нужно получить доступ.Как правило, есть причина отказываться от такой вещи, но если вы проверите источник, вы увидите, что это не так в этом особом случае.
Итак, я проверил его, он компилируется и кажется для запуска.
Но могу ли я на это положиться?Это разрешено?Есть ли что-то, что может помешать мне добавить классы в предопределенные системные пакеты java?Или это просто правильный способ сделать это, и мне никто не сказал?
ОБНОВЛЕНИЕ
Ответы, которые уже были предоставлены, заявили о возможности возникновения правовых проблем (если что-то делают правильно означает нарушение некоторых законов, потому что мое решение по умолчанию часто не интересуется этими законами ;-) и возможностью изменения поведения в суперклассе (очень маловероятно в этом случае).Если бы это все, я бы просто сделал это таким образом ...
ОБНОВЛЕНИЕ2
Отлично!Java - это имя защищенного пакета ... Так что мне действительно нужно MacGyver это ...
UPDATE3
Мне было просто интересно, почему я не могу получить хеш-ключи свойства.Fn getPropertyNames задокументировано так: Возвращает массив имен, распознаваемых getProperty (String) ... давайте посмотрим на исходный код:
public String[] getPropertyNames() {
return null;
}
Лучший код, который я когда-либо читал ...