Как обрабатывать изменение сигнатуры метода в Java [закрыто]

Сортировка работает так же, как в MongoDB, но вы можете сделать это «на лету» с помощью агрегата:

Возьмите следующие данные:

{ "field" : "BBB" }
{ "field" : "aaa" }
{ "field" : "AAA" }

Итак, со следующим утверждением:

db.collection.aggregate([
    { "$project": {
       "field": 1,
       "insensitive": { "$toLower": "$field" }
    }},
    { "$sort": { "insensitive": 1 } }
])

Произведут такие результаты, как:

{
    "field" : "aaa",
    "insensitive" : "aaa"
},
{
    "field" : "AAA",
    "insensitive" : "aaa"
},
{
    "field" : "BBB",
    "insensitive" : "bbb"
}

Фактический порядок вставки будет поддерживаться для любых значений, приводящих к тому же ключу при преобразовании.

1
задан mpb 16 January 2019 в 07:25
поделиться

1 ответ

Если подпись односторонняя и используется, то ее изменение приведет к поломке мест ее использования, если только изменения не совместимы с тем, как она использовалась (изменение int на Integer, для например, часто совместим благодаря авто-боксу).

Обычно добавляется перегрузка с новой сигнатурой, оставляя оригинальный метод на месте (хотя вы можете изменить его реализацию). Например, если оригинал был:

void m(Something a, SomethingElse b, YetAnotherThing c) {
    // ...
}

добавление перегрузки / некоторых перегрузок:

void m(Something a, SomethingElse b, YetAnotherThing c, ANewThing d) {
    // ...
}
// or
void m(Something a, SomethingElse b) {
    // ...
}
// or
void m(ANewThing d) {
    // ...
}

не сломает клиентов, используя этот оригинальный метод (при условии, что реализация продолжает делать то, что это было раньше, даже если он делает это по-другому).

0
ответ дан T.J. Crowder 16 January 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: