首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kotlin: const val vs val

Kotlin: const val vs val
EN

Stack Overflow用户
提问于 2018-02-07 10:21:52
回答 2查看 13.7K关注 0票数 41

据我所知,在Kotlin中,const val用于声明常量,而val用于只读属性。然而,我想知道在下面的情况下,哪一个更适合使用。

假设我有一个片段,它需要一个用于saveInstanceStaterestoreInstanceState的键。我想知道下面两个选项中哪一个更好:

选项1:

代码语言:javascript
运行
AI代码解释
复制
class MyFragment {
    private val MY_KEY = "my_key"
    ...
}

选项2:

代码语言:javascript
运行
AI代码解释
复制
private const val MY_KEY = "my_key" // declared in the same file.

class MyFragment {
    ...
}

我更喜欢#选项2,因为它清楚地表明MY_KEY是一个常量,并且值是在编译时确定的。但是,因为它是在顶层声明的,所以在编译后的java代码中创建一个名为MyFragmentKt (假设文件名为MyFragment.kt)的类的成本很高。在#Option1中,不会生成额外的类,尽管MY_KEY的值将在运行时赋值,而不是常量,但在此特定情况下如何使用它并没有区别。

因此,尽管我个人更喜欢#选项2,但我的分析让我认为#选项1即使不是更好,也不会更差。我只是想知道其他开发人员是如何看待这一点的,以及#option 2是否还有其他我没有想到的好处。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-07 10:29:55

每次编写(非内联) lambda表达式时,都会创建另一个类。与此相比,创建单个类来保存顶级声明似乎微不足道。

此外,如果你在顶层只有一个常量声明,它将被内联到每个使用站点(根据规范),因此拥有的类本身将变得不被引用,因此可以通过ProGuard的最小化来定位。它很可能不会出现在你的产品APK中。

票数 24
EN

Stack Overflow用户

发布于 2018-02-07 10:32:03

这两个选项之间不仅存在语义上的差异。

选项1(类中的val)是一个实例字段。

选项2(顶级const val)是顶级“静态”成员(大致上,因为static在Kotlin中不存在)。

这就是生成MyFragmentKt类的原因:顶级成员被编译成一个名为[Filename]Kt的类。

我会考虑第三种选择:

代码语言:javascript
运行
AI代码解释
复制
class MyFragment {
    companion object {
        private const val MY_KEY = "my_key"
    }
}

这样,MY_KEY (从Java语言中)是MyFragment类的static成员,因为JvmStatic是为const变量推断的。将会生成一个Companion类(但它将是空的)。

因为您最初的方法是类中的一个字段,所以我觉得companion object/static常量可能更可取。

More about companion objects vs Java's static

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48661282

复制
相关文章
k折交叉验证(R语言)
“ 机器学习中需要把数据分为训练集和测试集,因此如何划分训练集和测试集就成为影响模型效果的重要因素。本文介绍一种常用的划分最优训练集和测试集的方法——k折交叉验证。” k折交叉验证 K折交叉验证(k-fold cross-validation)首先将所有数据分割成K个子样本,不重复的选取其中一个子样本作为测试集,其他K-1个样本用来训练。共重复K次,平均K次的结果或者使用其它指标,最终得到一个单一估测。 这个方法的优势在于,保证每个子样本都参与训练且都被测试,降低泛化误差。其中,10折交叉验证是最常用的。
三猫
2018/04/10
6.9K0
k折交叉验证(R语言)
交叉验证,K折交叉验证的偏差和方差分析
交叉验证是一种通过估计模型的泛化误差,从而进行模型选择的方法。没有任何假定前提,具有应用的普遍性,操作简便, 是一种行之有效的模型选择方法。
狼啸风云
2019/06/13
3.9K0
深度学习–十折交叉验证
用scikit-learn来评价模型质量,为了更好地挑拣出结果的差异,采用了十折交叉验证(10-fold cross validation)方法。
全栈程序员站长
2022/11/17
1.4K0
深度学习–十折交叉验证
Machine Learning-模型评估与调参 ——K折交叉验证
为什么要评估模型的泛化能力,相信这个大家应该没有疑惑,一个模型如果性能不好,要么是因为模型过于复杂导致过拟合(高方差),要么是模型过于简单导致导致欠拟合(高偏差)。如何评估它,用什么数据来评估它,成为了模型评估需要重点考虑的问题。
Sam Gor
2019/08/22
3.1K1
kfold交叉验证k越大_内部交叉验证
设X是一个9*3的矩阵,即9个样本,3个特征,y是一个9维列向量,即9个标签。现在我要进行3折交叉验证。
全栈程序员站长
2022/11/08
5690
「交叉验证」到底如何选择K值?
交叉验证(cross validation)一般被用于评估一个机器学习模型的表现。更多的情况下,我们也用交叉验证来进行模型选择(model selection)。往远了说,交叉验证可以用于评估任何过程,但本文仅讨论机器学习评估这个特定领域。
统计学家
2019/04/08
3.3K0
「交叉验证」到底如何选择K值?
python实现交叉验证_kfold显示不可迭代
from sklearn.model_selection import KFold
全栈程序员站长
2022/11/06
7650
KFold交叉验证
from sklearn.model_selection import KFold
润森
2019/10/24
1.9K0
机器学习-K-近邻算法-模型选择与调优
将拿到的训练数据,分为训练和验证集,以下图为例:将数据分成4份,其中一份作为验证集,然后经过4次(组)的测试,每次都更换不同的验证集,即得到4组模型的结果,取平均值作为最终结果。由于是将数据分为4份,所以我们称之为4折交叉验证。
后端码匠
2021/08/19
4650
数据科学和人工智能技术笔记 九、模型验证
在本教程中,我们将使用着名的鸢尾花数据集。鸢尾花数据包含 150 种鸢尾花的四个测量值,以及它的品种。 我们将使用支持向量分类器来预测鸢尾花的品种。
ApacheCN_飞龙
2022/12/02
9610
数据科学和人工智能技术笔记 九、模型验证
万字长文总结机器学习的模型评估与调参,附代码下载
选自 Python-Machine-Learning-Book On GitHub
Python数据科学
2019/10/31
8860
万字长文总结机器学习的模型评估与调参,附代码下载
数据科学和人工智能技术笔记 十、模型选择
在进行模型选择时,我们必须小心正确处理预处理。 首先,GridSearchCV使用交叉验证来确定哪个模型表现最好。 然而,在交叉验证中,我们假装作为测试集被留出的一折是不可见的,因此不适合一些预处理步骤(例如缩放或标准化)。 出于这个原因,我们无法预处理数据然后运行GridSearchCV。
ApacheCN_飞龙
2022/12/02
5560
数据科学和人工智能技术笔记 十、模型选择
Machine Learning-模型评估与调参 ——嵌套交叉验证
嵌套交叉验证(nested cross validation)选择算法(外循环通过k折等进行参数优化,内循环使用交叉验证),对特定数据集进行模型选择。Varma和Simon在论文Bias in Error Estimation When Using Cross-validation for Model Selection中指出使用嵌套交叉验证得到的测试集误差几乎就是真实误差。
Sam Gor
2019/08/22
2.8K0
万字长文总结机器学习的模型评估与调参,附代码下载
“管道工作流”这个概念可能有点陌生,其实可以理解为一个容器,然后把我们需要进行的操作都封装在这个管道里面进行操作,比如数据标准化、特征降维、主成分分析、模型预测等等,下面还是以一个实例来讲解。
AI算法与图像处理
2019/10/28
1.1K0
万字长文总结机器学习的模型评估与调参,附代码下载
算法模型自动超参数优化方法!
学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter)。还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper parameter)。超参数是在开始学习过程之前设置值的参数。相反,其他参数的值通过训练得出。
Datawhale
2021/01/07
3.1K0
算法模型自动超参数优化方法!
如何通过交叉验证改善你的训练数据集?
假设这样一种情况,你对一个样本不均匀的数据集做了一段时间的处理,在这期间你用其中一部分数据做试验,测试了n种机器学习方法,然后喜闻乐见的发现每次的准确率都高达95%。你觉得这95%的准确率真的是实至名归吗?
AI研习社
2019/10/08
4.9K0
如何通过交叉验证改善你的训练数据集?
万字长文总结机器学习的模型评估与调参
选自 Python-Machine-Learning-Book On GitHub
Sam Gor
2019/10/17
8370
Machine Learning-模型评估与调参(完整版)
选自 Python-Machine-Learning-Book On GitHub
Sam Gor
2019/08/22
1.5K0
第四天-模型选择
每次将不同的包用作测试集,剩下的作为训练集,然后求结果的平均值,得到最终模型。
小飞侠xp
2018/08/28
4210
点击加载更多

相似问题

使用keras进行K折交叉验证

13

使用RandomForest进行K-折交叉验证

126

GridsearchCV和K折叠交叉验证

11

K折交叉验证与矩阵

11

如何使用tensorflow执行k折交叉验证?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文