2016-06-08 56 views
5

Cho phép nói rằng tôi có mẫu này mã trong Java:Mở rộng lớp generic trong Kotlin

public class MyActivityDelegate implements ActivityMvpDelegate 

nơi ActivityMvpDelegate:

interface ActivityMvpDelegate<V extends MvpView, P extends MvpPresenter<V>> 

Cùng đang chuyển đổi sang Kotlin trông như thế này

class MyActivityDelegate(private val activity: Activity) : ActivityMvpDelegate<MvpView, MvpPresenter<V>> 

Tất nhiên tôi có tài liệu tham khảo chưa được giải quyết tại V và tôi không chắc chắn mã này sẽ trông như thế nào, trong J ava tôi không cần phải chỉ định chung trên đây .. bất cứ lời khuyên sẽ được nhiều đánh giá cao

+0

mẫu java của bạn 'public class MyActivityDelegate thực hiện ActivityMvpDelegate' trông không đầy đủ (nó sẽ không biên dịch hoặc), bạn có chắc đó là việc kê khai chính xác của 'MyActivityDelegate'? – miensol

+1

Có, và có, nó biên dịch – henorek

Trả lời

4

khai giao diện của bạn đòi hỏi

  • V kéo dài MvpView
  • V (chính xác V, không kiểu phụ của nó) là được sử dụng làm thông số chung cho P extends MvpPresenter<V>

Cho rằng, bạn không thể mở rộng ActivityMvpDelegate<MvpView, MvpPresenter<V>>, vì không có đảm bảo V chính xác là MvpView (ngoài ra, trong Kotlin, các thông số chung không được kế thừa hoàn toàn, bạn phải xác định lại chúng như class SomeClass<T> : SomeInterface<T>).

Bạn có thể, tuy nhiên, hãy viết nó như

class MyActivityDelegate(private val activity: Activity) 
: ActivityMvpDelegate<MvpView, MvpPresenter<MvpView>> 

hoặc giới thiệu một tham số chung chung, do đó V và lập luận cho P vẫn đều giống nhau:

class MyActivityDelegate<T : MvpView>(private val activity: Activity) 
: ActivityMvpDelegate<T, MvpPresenter<T>> 

Bạn cũng có thể thay đổi tuyên bố chung về giao diện của bạn từ P extends MvpPresenter<V> đến P extends MvpPresenter<? extends V> (hoặc sử dụng out V trong Kotlin) và bạn sẽ có thể sử dụng bất kỳ loại phụ nào là V làm đối số, bao gồm bao bọc chung:

class MyActivityDelegate<T : MvpView>(private val activity: Activity) 
: ActivityMvpDelegate<MvpView, MvpPresenter<T>> 
Các vấn đề liên quan