小编Bla*_*Cat的帖子

如何在列表数据结构中编写clear()方法?

我最近阅读了一些框架源代码,并注意到他们编写了类似于列表的数据结构的clear()方法.逐个删除元素.

while (_arr.length > 0 )
{

    remove(_arr[0]);

}       
Run Code Online (Sandbox Code Playgroud)

(也许上面看起来有点令人困惑,但这是因为这种语言本身的数组类型本身就是一个动态数组)或

 for (int i = 0; i < size; i++)
  { elementData[i] = null;}
 size = 0;
Run Code Online (Sandbox Code Playgroud)

但我记得我写过这样的代码.该列表装饰了本机数组类型,我写了这样的clear()方法.

 _arr=new Array();
 _size=0;
Run Code Online (Sandbox Code Playgroud)

直接实例化新的本机数组类型.

并且此代码使用具有垃圾收集的语言编写.所以我认为所有元素最终都会被收集,为什么需要一个循环呢?新的会快吗?

java data-structures

25
推荐指数
2
解决办法
1929
查看次数

kotlin运算符重载的plus和plusAssign有什么区别?

我知道plus和之间有一些区别plusAssign,后者不能返回任何东西,但我发现plus可以实现什么呢plusAssign.

Point类重载plus并返回一个新的Point.

 data class Point(var x: Int, var y: Int)
{
    operator fun plus(other: Point): Point
    {
        return Point(x + other.x, y + other.y)
    }
} 
Run Code Online (Sandbox Code Playgroud)

Point类重载plusAssign,但不返回一个新的Point.

data class Point(var x: Int, var y: Int)
{
    operator fun plusAssign(other: Point): Unit
    {
       this.x+=other.x
        this.y+=other.y
    }
}
Run Code Online (Sandbox Code Playgroud)

但我发现它也可以像这样实现:

data class Point(var x: Int, var y: Int)
{
    operator fun plus(other: Point): …
Run Code Online (Sandbox Code Playgroud)

kotlin

5
推荐指数
1
解决办法
767
查看次数

接口bug中的Kotlin默认参数?

kotlin文件

interface Test {

    fun test(message: String, delay: Int =100)
}

class A: Test
{
    override fun test(message: String, delay: Int) {
    }

}
Run Code Online (Sandbox Code Playgroud)

我发现我不能@JvmOverloads在界面或类中使用.

如果我添加一个@JvmOverloadsin接口,错误是@JvmOverloads annotation cannot be used on interface method,如果我@JvmOverloads在类中添加,错误是platform declaration clash....

但是,我似乎能够在kotlin文件中使用默认参数,就像这样.

var a=A()
a.test("1234")
Run Code Online (Sandbox Code Playgroud)

但是当我在java文件中使用它时,似乎该方法没有重载.

A a=new A();
a.test("123");//Compile error
Run Code Online (Sandbox Code Playgroud)

没有接口的以下版本可以工作

class A
{
    @JvmOverloads
     fun test(message: String, delay: Int=100) {
    }

}
Run Code Online (Sandbox Code Playgroud)

然后我可以在java文件中正常使用它

 A a=new A();
 a.test("123");
Run Code Online (Sandbox Code Playgroud)

但是添加界面后如何保持相同的功能呢?

kotlin

5
推荐指数
1
解决办法
3319
查看次数

标签 统计

kotlin ×2

data-structures ×1

java ×1