This sounds like a case for Strategy patterns: http://en.wikipedia.org/wiki/Strategy_pattern
Define an interface that is "process collision" and then a number of implementations of that interface for different collision rules.
For each tile you then just setCollisionStrategy(MyRuleHere)
.
To check for a collision you just identify the tile then
if (tile.getCollisionStrategy.collide(player)) {
// Collision
}
The collide method could even return an enumeration for different types of collision - or return a more complex object - or even process the collision itself and make changes in the player. The right approach there would depend on your overall architecture.