Tag: 泛型

等效的Java和Kotlin Stream代码之间意外的类型差异

编辑2016年3月1日:公平的警告:这个问题被问到1.0.0之前的Kotlin。 从Kotlin 1.0.0开始,情况就不一样了。 请参阅下面的@Jayson Minard的Kotlin 1.0.0答案。 在使用Stream的Java 8代码中,我写了类似的东西 public static void main(String… args) { Stream<Integer> integerStream = Stream.of(1,2,3); List<Integer> integerList = integerStream.collect(Collectors.toList()); } 但是在Kotlin编写的类似代码中,我得到了意想不到的结果。 public fun main(args: Array<String>) { val integerStream : Stream<Int> = Stream.of(1, 2, 3) // this is what I expect to write, like the Java 8 code, but is a compilation error: […]

在Kotlin中扩展泛型类

比方说,我有这个Java代码示例: public class MyActivityDelegate implements ActivityMvpDelegate 其中ActivityMvpDelegate: interface ActivityMvpDelegate<V extends MvpView, P extends MvpPresenter<V>> 相同的代码转换为Kotlin看起来像这样 class MyActivityDelegate(private val activity: Activity) : ActivityMvpDelegate<MvpView, MvpPresenter<V>> 当然,我得到了V未解决的参考,我不知道这个代码应该看起来,在Java中,我不必指定泛型在这里..任何提示将不胜感激

Kotlin通用属性问题

在将我的Android项目从Java转换为Kotlin时,我遇到了Kotlin的一些问题。 假设我有接口I和扩展接口I的接口O. interface I{ } interface O: I{ } 通用类A具有扩展接口I的通用参数V,扩展类A的通用类B: abstract class A<V: I> { } class B : A<O>() { } 当我试图创建这样的属性: val returnB: A<I> get() = b 我得到编译器错误“需要A,找到B”。 在Java中,这将工作没有任何问题。 我怎样才能使用Kotlin访问? 我需要在我的应用程序中使用这种方法的基本类。 具有Navigator类的泛型参数的BaseViewModel: abstract class BaseViewModel<N>(application: Application, val repositoryProvider: RepositoryProvider) : AndroidViewModel(application) { var navigator: N? = null fun onDestroyView() { navigator = null […]

Kotlin生成通用的Java代码

我有一个kotlin接口,看起来像这样 interface BaseDao<in M : Model> { … @Delete fun delete(models: Collection<M>) … } 现在当我看到生成的代码,我看到这样的东西: public interface BaseDao { … @Delete void delete(@NotNull Collection var1); … } 有没有办法告诉科特林,我想明确设置集合的类型?

Java与Kotlin泛型

我有下面的Java类,我试图转换为使用泛型的Kotlin。 抽象类MvpViewHolder,M,V:View?>(itemView:View):RecyclerView.ViewHolder(itemView){ public abstract class MvpViewHolder<P extends BasePresenter> extends RecyclerView.ViewHolder { protected P presenter; public MvpViewHolder(View itemView) { super(itemView); } public void bindPresenter(P presenter) { this.presenter = presenter; presenter.bindView(this); } public void unbindPresenter() { presenter = null; } } 这是我的Kotlin尝试 abstract class MvpViewHolder<P : BasePresenter>(itemView: View) : RecyclerView.ViewHolder(itemView) { protected var presenter: P? = null […]

通用铸造在Kotlin

我有以下的类和接口: public interface ActivityComponent<T extends Activity> { void inject(T activity); } public interface MyActivityComponent extends ActivityComponent<MyActivity> { } public abstract class DaggerActivity extends Activity { abstract ActivityComponent getComponent(Context context); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityComponent component = getComponent(this); } } public class MyActivity extends DaggerActivity { @Override ActivityComponent getComponent(Context context) { MyActivityComponent component […]

Java到Kotlin泛型翻译

我想转移到Kotlin旧的Java项目,并发现有趣的,不能没有痛苦地转换这Kotlin public interface BaseJView<P extends BaseJPresenter> { P createPresenter(); } public interface BaseJPresenter<V extends BaseJView> { void bindView(V view); } 你能提供意见,我怎么能做到这一点?

Kotlin通用边界

我正试图将我的MVP解决方案从JAVA移植到Kotlin,而我在泛型方面遇到了一个很大的问题。 这是我的JAVA类的样子: public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements BaseView public abstract class BasePresenter<V extends BaseView> public interface BaseView 并移植到Kotlin: abstract class BaseActivity<P : BasePresenter<BaseView>> : AppCompatActivity(), BaseView abstract class BasePresenter<V : BaseView> interface BaseView 而当我试图使用 class MainActivity() : MainView, BaseActivity<MainPresenter>() 我得到“类型参数不在其范围内,预期: BasePresenter , 找到MainPresenter ”

Kotlin中的uncheckedVariance?

Martin Odersky在“ 编译器是数据库”的演讲中提出了一个有趣的方差角落案例: class Tree[-T] { def tpe: T @uncheckedVariance def withType(t: Type): Tree[Type] } T被定义为是逆变的,因为将类型树( Tree[Type] )看作是一个无类型树( Tree[Nothing] )的子Tree[Type]是有用的,而不是相反。 通常,Scala编译器会抱怨T出现在tpe方法的返回类型中。 这就是为什么Martin用@uncheckedVariance annotion关闭编译器的原因。 这里是翻译成Kotlin的例子: abstract class Tree<in T> { abstract fun tpe(): T abstract fun withType(t: Type): Tree<Type> } 正如所料,Kotlin编译器抱怨T出现在“out”的位置。 Kotlin有类似于@uncheckedVariance东西吗? 还是有更好的方法来解决这个问题?