Перегрузка документов - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь использовать Bundle в своем приложении для Android (Kotlin), и я не понимаю документацию по API.

https://developer.android.com/reference/android/os/Bundle.html

Например:

public void putFloat(String key, float value)

Хорошо, кажется простым, но почему функция просто не перегружена как:

public void put(String key, float value)

Кроме того, почему нет:

public void putInt(String key, Int value)

или

public void put(String key, Int value)

Я знаю, что программисты, которые собирают API, должны быть довольно умными и тратить некоторое время на размышления об их API, поэтому я не должен что-то понимать. Что я не понимаю?

Спасибо.

Редактировать:

Позвольте мне пояснить, почему я задаю этот вопрос с некоторой бессмысленностью, так как я не оценил ответ, который я получил ниже:

Если API не перегружен, как можно выполнить определенные задачи программирования. Например, если я использую универсальный тип, как программист узнает, какую функцию вызывать? Что будет делать, если ключ не был введен до вызова метода get? Разве методы, перегруженные типом значения по умолчанию, не решили бы эту проблему? Что произойдет, если тип put не соответствует типу get для данного ключа?

API, кажется, идет на все, чтобы избежать перегрузки (IMHO, базовая объектно-ориентированная функция), и перегрузка могла бы решить многие из проблем, которые я вижу. Скорее всего, API написан плохо или я не понимаю что-то фундаментальное? Я иду с, я не понимаю что-то фундаментальное или, по крайней мере, есть большая вероятность, что я чего-то не понимаю.

Поскольку моя путаница в этом API, похоже, привела меня к отсутствию перегрузки, я сосредоточил свой вопрос там. Если консенсус был чем-то вроде: «Он не перегружен, потому что он не перегружен», то я знаю, что не было ничего фундаментального, что я упускаю, надеясь избежать эффекта Dunning-Kruger , не предполагая Автор не знал, что они делают.

Android использует Bundle для экспериментального модуля Saved State, и они используют его внутри. Я пытаюсь понять Bundle API, чтобы эффективно использовать модуль «Сохраненное состояние». Чтение документации Bundle API настолько смутило меня, что я подумал, что есть что-то, чего я не понимаю в том, как читать документы. Как отмечено ниже, мне не хватало одного аспекта документации. Я думал, что документы устарели, и Google забыл обновить их, и я должен игнорировать их.

Может быть, я не понимаю предполагаемого использования Bundle API прикладными программистами? Может быть, Bundle API был предназначен только для внутреннего использования, и есть какой-то набор унаследованных классов, которые я не вижу? Может быть...??? Я не могу спекулировать на том, что я не знаю, я не знаю.

Кто-то может ответить: «Никогда не используйте API Bundle напрямую. Он был написан как интерфейс« C »для низкоуровневого использования, и они представили его обратно в API версии 1.0, а также забыл пометить его как устаревший. Вы должны использовать класс». Вместо этого класс SomeBundleDerived. Документы старые, игнорируйте их. " Кстати, этот ответ сделает мой день.

Или, может быть, API был плохо спроектирован? Ненавижу думать, что этот API-интерфейс рассматривается как основа значений по умолчанию в модуле «Сохраненное состояние», но если это так, то я бы лучше знал сейчас.

Мне не нравится, как люди обращаются с другими людьми в Stackoverflow, которые просто хотели бы получить некоторую помощь. Тактика формулирования вопроса не так, как предполагалось, а затем его отбрасывания вместо простого ответа на заданный вопрос приводит к нежеланию учиться. Я устал от издевательств со стороны людей, утверждающих, что они хотят помогать другим, но на самом деле они просто раздают банальности и требуют превосходства. Получите жизнь, желательно такую, которая не предполагает помощь другим в понимании технического материала.

Вы можете поместить ответ ниже, если хотите, я не буду его читать. Злоупотребление не стоит ответа.

1 Ответ

0 голосов
/ 08 июня 2019

почему функция просто не перегружена как: public void put(String key, float value)

Возможно для параллелизма с именами получателей.В Java не может быть двух методов с одинаковыми именами и одинаковым списком параметров, отличающихся только типом возвращаемого значения.Таким образом, нам нужно getFloat(), чтобы отличить от getInt(), getBoolean() и т. Д. На Bundle они решили назвать сеттеры в соответствии с тем же соглашением.На Intent для дополнений они не ответили.

Однако, в общем, вопросы типа "почему Разработчик X принял решение Y?"не подходят для переполнения стека, так как часто только разработчик X может ответить.Все остальные могут просто предложить догадки.

Кроме того, почему нет public void putInt(String key, Int value)

, который унаследован от BaseBundle.

...