我最近阅读了一些框架源代码,并注意到他们编写了类似于列表的数据结构的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)
直接实例化新的本机数组类型.
并且此代码使用具有垃圾收集的语言编写.所以我认为所有元素最终都会被收集,为什么需要一个循环呢?新的会快吗?
我知道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文件
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)
但是添加界面后如何保持相同的功能呢?