给定两个函数,foo()
and foo()
,第一个是标准的,第二个是可暂停的
fun foo(x: Int): Int {
return 2*x
}
suspend fun foo(x: Int): Int {
return 4*x
}
Run Code Online (Sandbox Code Playgroud)
以下代码无法编译,因为具有相同签名的两个函数存在冲突。
冲突重载:public fun foo(x: Int): Int 在文件 t.kt 中定义,public suspend fun foo(x: Int): Int 在文件 t.kt 中定义
如果我对挂起函数的理解是正确的,那么:
Continuation
参数被添加到挂起函数中,状态机使用它来停止和启动挂起代码Any
(因此Object
对于 java)这两个副作用理论上应该足以改变第二个foo()
函数签名,因此以不同于第一个的方式看待挂起标记的函数。
起初,我认为函数签名检查可以在实际将代码编译成字节码之前进行。然而,将两个呈现的函数变成实际的字节码实际上会导致 2 个具有 2 个不同签名的方法。
@Metadata(
mv = {1, 1, 16},
bv = {1, 0, 3},
k = 2,
d1 …
Run Code Online (Sandbox Code Playgroud) 在具有大量组件的Activity中,我有一个包含WebView的RelativeLayout(它只显示一个TextView,我不知道它的大小).
这是xml代码:
<RelativeLayout android:id="@+id/descripcionRelative" android:layout_below="@+id/descripcion_bold" android:layout_width="match_parent" android:layout_height="125dip" android:background="@drawable/my_border">
<WebView android:id="@+id/webViewDescripcion" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
RelativeLayout的属性android:layout_height是125dip,因为如果文本太大,我想划分到125dip.如果文字很大,我会看到带滚动的文字.大!
但是......如果文字很短,我会看到很多不必要的空间.
一个解决方案是将RelativeLayout的android:layout_height更改为wrap_content.如果文本很短,则组件将具有精确的像素,但如果文本太大,我无法对其进行分隔.
BIG PROBLEM是我无法计算WebView的高度.如果我这样做:descripcion_web.getHeight()它返回0.
如果我在这里调用此方法,它不会返回正确的数字:
descripcion_web.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView webView, String url) {
super.onPageFinished(webView, url);
RelativeLayout marco = (RelativeLayout)findViewById(R.id.descripcionRelative);
System.out.println("Height webView: "+webView.getHeight());
System.out.println("Height relative: "+marco.getHeight());
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试在onResume()中的方法中调用它,但它不起作用.
另一个解决问题的尝试是将android:layout_height设置为match_parent并使用View方法setMaximumHeight(),但它不存在.但是,它确实存在setMinimumHeight()...
我该如何解决这个问题?非常感谢你!
我正在写一个Kotlin应用程序,我一直在研究这种语言,我注意到要创建一个变量,你必须明确定义它是否为null然后你使用?运营商.
现在,我的问题.有时我必须定义一个全局变量(在这种情况下是一个片段),所以我需要将它设为null,因为我还不能初始化它
在java中我没有这个问题,因为在声明它之后我做的第一件事是在onCreate()中初始化像这样
TurboFragment fragment = null;
@Override
public void onCreate(Bundle savedInstanceState) {
...
fragment = adapter.getCurrentFragment();
}
Run Code Online (Sandbox Code Playgroud)
然后我可以在没有语法问题的情况下使用它在Kotlin中是不同的,因为我必须这样做
private var fragment: TurboFragment? = null
override fun onCreate(savedInstanceState: Bundle?) {
...
fragment = adapter!!.currentFragment
fragment!!.foo()
var x = fragment!!.sampleInt
}
Run Code Online (Sandbox Code Playgroud)
现在,每次我调用片段的实例时我都必须使用null-safe !! 运营商.这使我的代码变得混乱,因为对于每一行,我至少有一个!运算符,它看起来真的不清楚它是否如此频繁,特别是如果你有5个或更多这样的变量.有没有办法简化代码或这种语言的性质是这样的?
自从我开始将项目从 java 转换为 kotlin 以来,我一直在 Mac 上遇到构建性能问题。
我在 Android Studio 3.0.1 中使用 gradle
问题是,当我构建/运行/编译源代码时,我从 gradle 控制台收到很多关于代码命名约定的警告,让我向您展示
我认为这会减慢我的构建速度。我还尝试稍微调整一下我的 gradle 配置文件并构建脚本,但什么也没发生
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
Run Code Online (Sandbox Code Playgroud)
而且在我的 build.gradle 顶部
tasks.whenTaskAdded { task ->
if (task.name == "lint" || task.name == "lintVitalRelease") {
task.enabled = false
}
}
Run Code Online (Sandbox Code Playgroud)
...
lintOptions {
checkAllWarnings false
checkReleaseBuilds false
ignoreWarnings true // false by default
quiet true // false by default
tasks.lint.enabled = false
}
Run Code Online (Sandbox Code Playgroud)
我将编译器参数设置为-x lint
,所以我对这个错误感到惊讶有人有同样的问题吗?
我对以下实例中?
和的用法有点困惑。!!
lat = mLastLocation?.latitude.toString()
longi = mLastLocation!!.longitude.toString()
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个空安全运算符?