1. Cách dùng từ kháo 'out' khi khai báo generic abstract class Source < out T> { abstract fun nextT ( ) : T } fun demo ( strs : Source < String> ) { val objects : Source < Any> = strs // This is OK, since T is an out-parameter } Nếu không có từ khoá ' out ', trình biên dịch sẽ thông báo lỗi " Type mismatch: inferred type is Source but Source was expected " 2. Cách dùng từ kháo 'in' khi khai báo generic Trường hợp khai báo với ' in ' thì T chỉ được dùng như là tham số đầu vào của hàm, không được khai báo dạng trả về return. Ví dụ: abstract fun nextT ( ) : T Trình biên dịch báo lỗi " Type parameter T is declared as 'in' but occurs in 'out' position in type T " Có thể sử dụng bằng cách như thế này: abstract fun nextT (input: T ) ================== Tóm lại: "When we want to assign the generic type to any of its super type, then we need ...
Think big, start small, move fast.