Это потому, что ваш компилятор использует ближайший класс, который он может найти для представления StringUtils
.Это может быть или , который вы написали в своем коде, или тот, который org.apache
, но кто знает?Вы сами, возможно, даже не уверены в какой-то момент!Таким образом, вы должны уточнить, что.
Класс фактически определяется с использованием полного имени пакета, и когда вы выполняете импорт, он позволяет вам использовать только ярлык , то есть StringUtils
вместо org.apache.commons.lang3.StringUtils
.
Чтобы противостоять этой проблеме, есть несколько опций:
- статический импорт с
import org.apache.commons.lang3.StringUtils._
: здесь вы можете напрямую вызвать метод isEmpty
, но компилятор не найдетStringUtils
per say - используйте полное имя в своем вызове:
println(org.apache.commons.lang3.StringUtils.isEmpty(...))
Таким образом, невозможно путаница - в Scala у вас есть возможность определять аллиасы.Для этого у вас есть два варианта.Либо во время импорта:
import org.apache.commons.lang3.{StringUtils => ApacheStringUtils}
, либо в вашем классе: type ApacheStringUtils = org.apache.commons.lang3.StringUtils
.Для такого рода случаев опция «во время импорта» немного удобнее и, возможно, даже более эффективна (вы можете заменить тип, который вы определили в своем коде во время выполнения).
Я бы лично предпочел вариант3.1 (когда вы создаете псевдоним во время импорта).Таким образом, ваш код более понятен, и вы можете вызывать любую функцию с StringUtils
.