Недавно я читал о поведении GStringImpl
и String
при использовании в коллекциях в Groovy.
Я понимаю, что причина этого оценивается как ложная...
"${'test'}".equals("test") == false
происходит из-за требования симметрии контракта .equals()
, однако мне было интересно, была ли причина, по которой GStringImpl
не мог быть просто сразу оценен как String
. Поэтому, когда я делаю что-то вроде этого...
"${'someString'}"
Я не получаю GStringImpl
, я просто возвращаю простую String
Java, которую я могу немедленно использовать, например, в качестве ключа на карте.
Я знаю, что есть некоторые обходные пути, такие как
String s = "${'someString'}"
однако такие вещи немного неудобны, и GStringImpl
между GStringImpl
и String
кажется, является большой "ошибкой" для новичков в Groovy.