Я часто сталкиваюсь с ситуацией, когда хочу вернуть несколько значений из метода Java, и для этой цели не стоит создавать класс/объект. В моем конкретном текущем случае у меня есть несколько методов проверки ввода, которые вычисляют промежуточные результаты, которые я хотел бы повторно использовать в вызывающих.Лучший способ вернуть строку в качестве параметра в Java
Одно из решений заключается в том, чтобы передать новый список и применить метод к моим результатам, но это вводит в заблуждение, когда я знаю, что всегда будет одно значение для каждого параметра, который я хочу вернуть.
Самая распространенная такая ситуация - когда я хочу вернуть строку. Я могу передать в StringBuilder или StringBuffer, и метод заполнит это значение. Но по какой-то странной причине эти классы не предоставляют метод set() (кроме конструктора, который не является полезным для этой цели). Самое близкое, что я могу придумать, это myStringBuilder.replace(0, myStringBuilder.length(), myString)
, но это действительно уродливо и не ясно передает мои намерения. Поэтому я хотел бы расширить эти классы с помощью собственного класса утилиты, который добавляет метод set() (и внутренне использует replace), но эти классы объявляются final
по какой-то странной причине, и я тоже не могу этого сделать.
Я что-то упустил? Есть ли какой-то предпочтительный способ делать то, что я хочу, - передавая в каком-то записываемом буфере строк, в который метод может поместить значение? Есть ли веская причина, что эти классы объявлены окончательными?
Примером такого метода может быть:
void foo(List<ObjectA> arg1, List<ObjectB> arg2, StringBuffer somethingInteresting, StringBuffer somethingElseInteresting)
Я не хочу, чтобы заменить последние два параметра списка, если две строки не имеют никакого отношения семантически, потому что я накладывая семантику на который не сообщается четко. Я не хочу передавать два отдельных списка и ожидать, что каждый из них вернется с размером() из 1, потому что это снова не понятно вызывающему.
вы можете поделиться ожидаемой сигнатурой методы? – sidgate
Надеюсь, текущий текст станет более четким. Я имел в виду для любого заданного параметра, я ожидаю единственный результат, поэтому, передавая кучу списков, каждый из которых, как ожидается, будет иметь размер() 1 при возврате, вводит в заблуждение. – BobDoolittle
Я добавил подпись метода и некоторый дополнительный уточняющий текст. – BobDoolittle