如何从kotlin中的类实例化对象

     2023-04-19     146

关键词:

【中文标题】如何从kotlin中的类实例化对象【英文标题】:how to instantiate an object from a class in kotlin 【发布时间】:2019-02-14 03:54:18 【问题描述】:

我正在学习 Kotlin,我在 google 上搜索了如何在 kotlin 中创建一个类。所以,我创建了下面的类作为测试。 在主要活动中,我试图从 Board 类实例化一个对象,但出现以下错误:

classifier Board does not have a companion object

请告诉我如何实例化类 Board 的对象?

MainActivity

class ActMain : AppCompatActivity() 
override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.layout_act_main)

    Board board = new Board(name = "ABC");


Board.kt

data class Board(val name: String) 
    var age: Int = 0

【问题讨论】:

这不是有效的 Kotlin 【参考方案1】:

Kotlin 不使用new

Board board = new Board(name = "ABC");

不正确。使用

val board = Board("ABC")

您的代码反映了 Java 语法...有点。 Kotlin 具有类型推断功能,因此您无需指定类类型。但是,如果您指定它,它与 Java 不同:

val board: Board = Board("ABC")

在 Kotlin 中通常也不使用分号,尽管如果使用它们不会破坏编译。

name = "ABC" 只是无效的语法,无论是 Java 还是 Kotlin。 实际上它是(来自@hotkey):https://kotlinlang.org/docs/reference/functions.html#named-arguments

【讨论】:

name = "ABC" 实际上是在 Kotlin 中传递参数的正确方法,请参阅语言参考中的 Functions / Named Arguments。 在一行代码中放置多个语句或表达式时,Kotlin 中需要使用分号。【参考方案2】:

与 Java 不同,在 Kotlin 中这是正确的方式

MainActivity.kt

class ActMain : AppCompatActivity() 
    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.layout_act_main)

        val board = Board("ABC")
        board.age = 12
    

Board.kt

class Board(val name: String) 
    var age: Int = 0

【讨论】:

【参考方案3】:

试着忘记java

val board = Board("name")

【讨论】:

【参考方案4】:

在科特林中

当你想声明新对象时,你可以这样做。

val board = Board("ABC")

如果您使用 val 关键字声明对象。它看起来就像您在 java 中使用 final 一样。您声明的变量无法重新创建。

var board = Board("ABC")

如果你使用 var 来声明它在 java 中看起来像普通变量

无论如何,在 kotlin 中你会看到一些它在 java 中不包含的东西,例如 范围功能如下面的链接。它将帮助您更轻松地编写代码。

https://kotlin.guide/scoping-functions

希望对你有所帮助:)

【讨论】:

Kotlin Multiplatform (KMM) 中的对象在 Swift 函数中实例化。函数结束它的作用域。谁释放了对象?

】KotlinMultiplatform(KMM)中的对象在Swift函数中实例化。函数结束它的作用域。谁释放了对象?【英文标题】:ObjectfromKotlinMultiplatform(KMM)instantiatedinsideSwiftfunction.Functionendsitsscope.Whodeallocatestheobject?【发布时间】:2021-12-3013:31:15【问题... 查看详情

kotlin-类和对象(代码片段)

...写属性重写初始化顺序抽象类接口类概述和Java一样,Kotlin中的类由class关键字修饰,比如:classPerson但是不同的是,如果Kotlin的类是空的,即不含任何属性或方法,花括号是可以省略的:classEmptyJava的祖... 查看详情

Jackson JSON 库:如何实例化包含抽象字段的类

】JacksonJSON库:如何实例化包含抽象字段的类【英文标题】:JacksonJSONlibrary:howtoinstantiateaclassthatcontainsabstractfields【发布时间】:2011-07-2606:17:01【问题描述】:我想将JSON字符串转换为java对象,但该对象的类包含抽象字段,Jackson无... 查看详情

抽象类不能实例化对象

...类中的抽象方法只有声明,没有主体,如果实例化了,又如何去实现调用呢? sleep和wait的区别有:1,这两个方法来自不同的类分别是Thread和Object2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使... 查看详情

如何列出从 Ruby 中的类创建的所有对象? [复制]

】如何列出从Ruby中的类创建的所有对象?[复制]【英文标题】:HowdoIlistallobjectscreatedfromaclassinRuby?[duplicate]【发布时间】:2012-12-2809:23:31【问题描述】:Ruby中有没有办法让一个类知道它存在多少个实例并列出它们?这是一个示例... 查看详情

Java如何从字符串实例化一个类[重复]

】Java如何从字符串实例化一个类[重复]【英文标题】:Javahowtoinstantiateaclassfromstring[duplicate]【发布时间】:2011-09-2107:03:11【问题描述】:可能重复:CreatenewclassfromaVariableinJava我有一个字符串StringclassName="DummyClass"现在我想创建一个... 查看详情

在 Python 中,如何在重新加载后更改实例化对象?

】在Python中,如何在重新加载后更改实例化对象?【英文标题】:InPython,howdoyouchangeaninstantiatedobjectafterareload?【发布时间】:2010-11-0800:23:40【问题描述】:假设您有一个从模块内的类实例化的对象。现在,您重新加载该模块。您... 查看详情

对比java学kotlin类和对象(代码片段)

...写属性重写初始化顺序抽象类接口类概述和Java一样,Kotlin中的类由class关键字修饰,比如:classPerson但是不同的是,如果Kotlin的类是空的,即不含任何属性或方法,花括号是可以省略的:classEmptyJava的祖... 查看详情

如何从另一个活动访问在一个活动中实例化并在其自己的线程中运行的对象?

】如何从另一个活动访问在一个活动中实例化并在其自己的线程中运行的对象?【英文标题】:Howtoaccessanobjectinstantiatedinoneactivityandrunninginitsownthread,fromanotheractivity?【发布时间】:2017-08-1307:05:13【问题描述】:我在访问控制音频... 查看详情

如何从 kotlin 中的内部对象类访问类级别变量

】如何从kotlin中的内部对象类访问类级别变量【英文标题】:Howtoaccessclasslevelvariablesfrominnerobjectclassinkotlin【发布时间】:2020-04-1218:25:25【问题描述】:我正在使用branchSDK,它在活动lcas中创建Object类。我需要从此object类访问类级... 查看详情

SonarQube 投诉要么删除这个无用的类对象实例化,要么使用它

】SonarQube投诉要么删除这个无用的类对象实例化,要么使用它【英文标题】:SonarQubeComplaintEitherremovethisuselessobjectinstantiationofclassoruseit【发布时间】:2021-02-1106:01:10【问题描述】:我正在尝试修复我从SonarQube获得的这个错误,但... 查看详情

如何从预制件中获取场景中游戏对象的引用(代码片段)

...引用吗?因此,这是一个新系统,我真的只是在寻找关于如何将场景游戏对象的引用保存到预制件中的建议,因为我的旧系统只是将场景中的游戏对象保持活动而不是实际实例化它们我很想听到不同类型的方法,而不仅仅是使用... 查看详情

kotlin中级---初识kotlin中的对象.md

万物皆对象对象就是类的实例化用Kotlin描述对象classFriendvarname:String=""varhairColor:String="".....愉快的构造1.主构造函数:classFriendconstructor(valname:String,valage:Int)主构造二下面这种构造纯粹的传值,并不在这 查看详情

c++只能实例化1个对象的类

...啦实例化对象是指是指用这个类来定义一个具体的事物.如何确保它的实例化对象只得一个?可以通过使用静态变量的办法在类中加一个静态变量,然后在类的构造函数中做一下判断就好了classaa()statica=0;if(a==0)初始化对象;else不能... 查看详情

向已经实例化的对象添加方法? [复制]

...icate]【发布时间】:2020-02-2006:33:23【问题描述】:我知道如何使用include将mixins添加到Ruby中的类中。但是,我想向已经实例化的对象添加一个或多个方法。这可能吗?例如,Rack::File::Iterator类表现为迭代器,但它不继承自Enumerable... 查看详情

如何从类内实例化的对象访问私有变量

】如何从类内实例化的对象访问私有变量【英文标题】:Howtoaccessprivatevariablefromobjectinstantiatedinsideclass【发布时间】:2016-06-1122:29:10【问题描述】:我正在尝试更改对象内部类的私有变量,该对象在该类内部初始化。我的意图可... 查看详情

kotlin-反射

...,都能够调用它的任意一个方法和属性。常用API使用demoKotlin的反射需要集成org.jetbrains.kotlin:kotlin-reflect仓库,版本保持与kotlin一致。在Kotlin中,字节码对应的类是kotlin.reflect.KClass,因为Kotlin百分之百兼容Java,所以Kotlin中可以使用J... 查看详情

在目标 C 中引用另一个类中的实例化对象

...的一个类(rootViewController)中有一个字段(navigationController)。如何从另一个类中引用实例化的rootViewCon 查看详情