```kotlin= // interfaceを利用する例 class DisplayImagesAdapter( private val listener: DisplayRankingImagesViewHolder.Listener, ) { class DisplayRankingImagesViewHolder(private val listener: Listener) { private val recyclerView init { recyclerView.setOnScrolled { listener.loadMoreRanking() } } fun bind() {} interface Listener { fun loadMoreRanking() } } override fun onCreateViewHolder() { DisplayRankingImagesViewHolder(listener) } } class MainActivity : DisplayImagesAdapter.DisplayRankingImagesViewHolder.Listener { override fun loadMoreRanking() { viewModel.loadMoreRanking() } override fun onCreate() { val adapter = DisplayImagesAdapter(this) } } // Callbackを利用する例 class DisplayImagesAdapter( private val loadMoreRanking: () -> Unit ) { class DisplayRankingImagesViewHolder( private val loadMoreRanking: () -> Unit ) { private val recyclerView init { recyclerView.setOnScrolled { loadMoreRanking() } } fun bind() {} } override fun onCreateViewHolder() { DisplayRankingImagesViewHolder( loadMoreRanking = loadMoreRanking ) } } class DisplayRankingAdapter {...} // in MainActivity val adapter = DisplayImagesAdapter( loadMoreRanking = { viewModel.loadMoreRanking() } ) ``` ```kotlin= interface HelloRepository { fun hello(): String } interface HogeService class HelloRepositoryImpl( private val hogeService: HogeService ) : HelloRepository {...} class HelloRepositoryTest : HelloRepository {...} class MainListAdapter( private val helloRepository: HelloRepository, ) : ListAdapter(...) val helloRepository = if (isTest) { HelloRepositoryTest() } else { HelloRepositoryImpl( hogeService = HogeServiceImple() ) } val adapter = MainListAdapter( helloRepository = helloRepository, ) // koin single { HelloRepositoryImpl(get()) } val adapter: MainListAdapter by inject() ``` ```kotlin class RankingAdapter( private val update: () -> Unit, private val listener: Listener, ) : RecyclerView.Adapter() { interface Listener { fun update() } } class MainActivity : AppCompatActivity() { private val viewModel .... override fun onCreate(...) { } } val listener = object : RankingAdapter.Listener { override fun update() { hello() } } val adapter1 = RankingAdapter( update = { hello() }, listener = listener, ) val adapter2 = RankingAdapter( update = { hello() }, listener = listener, ) adapter1.update == adapter2.update // false adapter1.listener == adapter2.listener // true val update = { hello() } val adapter3 = RankingAdapter( update = update, listener = listener, ) val adapter4 = RankingAdapter( update = update, listener = listener, ) adapter3.update == adapter4.update // true adapter3.listener == adapter4.listener // true ``` ```kotlin val fetchIllustsResult = if (currentKey == null) {} else {} val illustList = fetchIllustsResult.illusts.map { IllustType.NormalIllust(it) } val loadResultPageData = if (currentKey == null) { listOf( IllustType.IllustHeader() ) + illustList } else illustList return LoadResult.Page( ) ```