TIL

아이템 23 타입 파라미터의 섀도잉을 피하라

class Forest(val name: String) {
	fun addTree(name: String) {
		// name은 파라미터의 name
		// 프로퍼티를 사용하려면 this.name이 필요
	}
}
interface Tree
class Birch: Tree
class Spruce: Tree

class Forest<T: Tree> {
	fun <T: Tree> addTree(tree: T) {
		// ...
	}
}

fun main() {
	val forest = Forest<Birch>()
	forest.addTree(Birch())
	forest.addTree(Spruce())
}
class Forest<T: Tree> {
	fun addTree(tree: T) {
		// ...
	}
}

fun main() {
	val forest = Forest<Birch>()
	forest.addTree(Birch())
	forest.addTree(Spruce()) // type missmatch
}
class Forest<T: Tree> {
	fun <ST: Tree> addTree(tree: ST) {
		// ...
	}
}

정리