Я посмотрел на рубиновую документацию для StringIO
, и похоже на то, что Вы хотите, StringIO#string
, не StringIO#to_s
Таким образом, измените свой код на:
s = StringIO.new
s << 'foo'
s << 'bar'
s.string
Вы можете транслировать через нетипизированный интерфейс List:
List<A> a = new ArrayList<A>();
List<B> b = (List)a;
List
является не подтипом List
!
JLS даже упоминает, что явно :
Подтип не распространяется через общие типы:
T <: U
не означает, чтоC
.<: C
Вы можете попробовать это:
List<A> a = new ArrayList<A>();
List<B> b = (List<B>) (List<?>) a;
Это основано на ответе jarnbjo, но не используйте необработанные списки.