The problem we have with your example is, that the code you show us doesn't make sense.
You define a Block enum with a Solid INSTANCE, but also use Solid.list. This doesn't make sense, because the Block enum does not have a "list" field. Is it possible that you also created classes which have the same name as the enum instances?
Perhaps does the following help, your List<Block> does NOT hold "multiple types of objects."
it does only hold Block objects. You can switch over enums, so you can give the following a try.
for(Block b: blockList)
case Solid: foo(); break;
case Bad: bar(); break;
case Bounce: zomfg(); break;