2017-10-19 33 views
5

在Java中,我可以宣布这个如何在Kotlin中声明原始类型?

private List a; 

//onCreate 
a = new ArrayList() 

但在科特林它显示错误,它迫使我特定类型

private List<String> a 

有时候我不想提供一个类型(我不需要到),但它显示的错误在科特林 例如 在Java

public abstract class BaseActivity<T extends ViewDataBinding> extends AppCompatActivity { 
//something 
} 

public abstract class BaseFragment { 
private BaseActivity activity; 
//something 
} 

//in kotkin I can't write 
lateinit var activity: BaseAtivity //show error here (I have to specific a type but this is the base class and I do not want to specific a type here). I just want a reference of BaseActivity 

@Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof BaseActivity) { //good in java but show error 
               //in kotlin because I have to //specific a type like BaseAtivity<something> 
      BaseActivity activity = (BaseActivity) context; 
      this.mActivity = activity; 
      activity.onFragmentAttached(); 
     } 
    } 

我可以在科特林写什么来实现在java中相同的代码

+2

应该指出,你不应该忽略Java中的<<>。原始类型不是理想的任何手段。 – Carcigenicate

+0

谢谢你的警告我 – coinhndp

+0

至少比较喜欢'BaseActivity '。原始类型存在与Java-5之前的代码互操作。 –

回答

4

您可以使用star projections

例如

private List<*> a 
+0

@coinhndp您可以[接受答案](https://meta.stackexchange.com/a/5235/348195)。 – Moira

1

Docs引用: “Java的原始类型转换成星预测,List变得List<*>,即List<out Any?>!”。

因此,您可以使用像<*>这样的星形投影。