-
- kotlin调用javabean数据实体类
- kotlin的空安全问题
- 空安全限定不能为NULL
- kotlin和java中泛型的差异问题
- SAMConversion在kotlin中调用java的坑
javabean实体类
public class DataClass {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
kotlin中的调用赋值:
fun main(args: Array<String>) {
val data=DataClass()
data.id=1//直接把java中的getset方法转换成了kotlin中的属性
println(data.id)
// 结果:1
}
java中返回值为null的方法
public class NullSafetyJava {
public String getData(){
return null;
}
}
kotlin代码的调用
fun main(args: Array<String>) {
val nullSafety=NullSafetyJava()
val data=nullSafety.data
println(data)
// 结果:null
val data1:String=nullSafety.data
println(data1)
// 此时限定了data必须是String类型,不能为null,此处就会报错
}
Java代码
import com.sun.istack.internal.NotNull;
import java.text.SimpleDateFormat;
import java.util.Date;
public abstract class NullSafetyAbsClass {
public abstract String formate(Date date);
public @NotNull String formatTime(@NotNull Date date) {//注解表示传入的date参数一定不能为null
return new SimpleDateFormat("HH:mm:dd").format(date);
}
}
kotlin代码
import java.util.*
class NullSafetySubClass : NullSafetyAbsClass() {
override fun formate(date: Date?): String {
return date.toString()
}
}
fun main(args: Array<String>) {
val nullSafetySubClass = NullSafetySubClass()
println(nullSafetySubClass.formate(Date()))
println(nullSafetySubClass.formatTime(Date()))
/**
* 结果:
* Thu Dec 07 12:03:31 GMT+08:00 2017
12:03:07
*/
}
java代码
import java.util.ArrayList;
import java.util.List;
public class Generics {
// 安卓中的MVP的绑定,kotlin中写不出这样的代码
public abstract class View<P extends Presenter> {
P presenter;
}
public abstract class Presenter<V extends View> {
V view;
}
public static void main(String[] args) {
List list = new ArrayList();//这里可以不用传泛型
list.add("Java");
list.add(12);
for (Object o : list) {
System.out.println(o);
}
}
// 结果:
// Java
// 12
}
fun main(args: Array<String>) {
val list=ArrayList<Any>()//此处泛型不能为空,any表示Object
list.add("Java")
list.add(34)
list.map (::println)
/**
* 结果:
* Java
34
*/
}
import java.util.ArrayList;
public class SAMInJava {
private ArrayList<Runnable> runnables=new ArrayList<>();
public void addTask(Runnable runnable){
runnables.add(runnable);
System.out.println("After add: "+runnable+" we have "+runnables.size()+" in all.");
}
public void removeTask(Runnable runnable){
runnables.remove(runnable);
System.out.println("After remove: "+runnable+" only "+runnables.size()+" left.");
}
}
import java.util.concurrent.Executors
fun main(args: Array<String>) {
val worker= Executors.newCachedThreadPool()
worker.execute {
println("hello,线程池")
}
val samInJava=SAMInJava()
val lanaba={
println("hello")
}
//每次传的lanaba都会在java中被转换(conversion)成Runable接口的实例,每个地址都不一样
samInJava.addTask(lanaba)
samInJava.addTask(lanaba)
samInJava.addTask(lanaba)
samInJava.addTask(lanaba)
samInJava.addTask(lanaba)
samInJava.removeTask(lanaba)
samInJava.removeTask(lanaba)
samInJava.removeTask(lanaba)
samInJava.removeTask(lanaba)
samInJava.removeTask(lanaba)
/**
* 结果,并没有移除
*/
// After add: SAMConversionKt$sam$Runnable$28f07624@548a9f61 we have 1 in all.
// After add: SAMConversionKt$sam$Runnable$28f07624@1753acfe we have 2 in all.
// After add: SAMConversionKt$sam$Runnable$28f07624@7c16905e we have 3 in all.
// After add: SAMConversionKt$sam$Runnable$28f07624@2a2d45ba we have 4 in all.
// After add: SAMConversionKt$sam$Runnable$28f07624@2a5ca609 we have 5 in all.
// After remove: SAMConversionKt$sam$Runnable$28f07624@20e2cbe0 only 5 left.
// After remove: SAMConversionKt$sam$Runnable$28f07624@68be2bc2 only 5 left.
// After remove: SAMConversionKt$sam$Runnable$28f07624@28feb3fa only 5 left.
// After remove: SAMConversionKt$sam$Runnable$28f07624@675d3402 only 5 left.
// After remove: SAMConversionKt$sam$Runnable$28f07624@51565ec2 only 5 left.
}