在kotlin中,对于任何具有init方法的类(我在ViewModel中发现了这个示例),为什么以下内容有效:
val variable1 = "nothing"
fun example1() {
variable1
variable2
}
val variable2 = "nothing"
我声明变量和方法的顺序没有区别,我仍然可以在方法中访问variable2,但是,
val variable1 = "nothing"
val variable2 = "nothing"
init {
varia
我已经开始学习Kotlin了。我想知道init块和constructor之间的区别。这与我们如何利用这一点来改进之间有什么区别呢?
class Person constructor(var name: String, var age: Int) {
var profession: String = "test"
init {
println("Test")
}
}
我的构建文件如下所示:
val nexusBaseUri: String by extra
val gradle_version: String by extra
val kotlin_version: String by extra
buildscript {
val nexusBaseUri by extra { "https://mynexusserver/nexus" }
val gradle_version by extra { "4.1" }
val kotlin_version by extra { "1.1.4-
我在语言定义中找不到任何东西来解释Kotlin中类的初始化。
import java.util.Properties
fun main(args: Array<String>) {
val out = MyClass()
out.fn()
}
class MyClass {
private val a = Properties() // 1
init {
fn()
}
public fun fn() {
println("Fn called. a = $a")
}
open class Super {
open var name : String = "Name1"
init {
println("INIT block fired with : $name")
name = name.toUpperCase()
println(name)
}
}
class SubClass(newName : String) : Super() {
override var name : String = "Mr. $newName"
我不太明白kotlin是如何管理属性名和主构造函数参数名的。如果我写了相同的属性名和参数名,那么kotlin编译器会给出一个错误。
class Student(name : String, roll : Int){
val name: String
init {
name = "Asif"
}
}
它产生了这个错误。
> Error:(9, 5) Kotlin: Property must be initialized or be abstract
> Error:(12, 9) Kotlin: Val cannot be
在Kotlin中,没有声明为nullable或lateinit的变量必须在构造函数(或init)中初始化。我试着这样做:
class Foo{
var foo:myType
init{
complicatedFooInit()
}
fun complicatedFooInit(){
foo = //a whole bunch of code here
}
}
我仍然收到Property must be initialized or declared abstract错误。通过将myType设置为Int并在compli
这是我的测试代码:
class Test {
init {
a = 1
}
constructor() {
a = 2
}
private var a: Int
init {
a = 3
}
}
如果删除辅助构造函数:
class Test {
init {
a = 1 // Error: Variable cannot be initialized before declaration
}
// constructor() {
//
我正在学习Kotlin编程语言。我试着用不同的模式编写代码,并试图理解。但是,我不明白这件事。你能帮帮我吗?下面是:
open class Parent {
open val foo = 1
init {
println(foo)
}
}
class Child: Parent() {
override val foo =2
}
fun main() {
Child()
}
在这段代码中,是输出。这会怎么样?
我正在尝试找到一种在每次测试前设置变量的方法。就像Junit中的@ the方法一样。浏览kotlin-test中的文档,我发现我可以使用interceptTestCase()接口。但不幸的是,下面的代码将触发异常:
kotlin.UninitializedPropertyAccessException: lateinit property text has not been initialized
class KotlinTest: StringSpec() {
lateinit var text:String
init {
"I hope variable is be ini
我正在致力于开发人员网站的android蓝牙聊天项目,我正在尝试使用Kotlin而不是java。我对Kotlin很陌生,我只是对使用init块和lateinit关键字的“正确”方法和我的同伴对象有一些混淆。在我发布的代码中,我没有同伴对象,但我想知道是否应该这样做。到目前为止,我主要是使用一个伴生对象来模拟java的静态类成员,或者有时包含类常量。至于init块,我基本上是用来构造函数的。这是通过类声明中定义的实际构造函数传递成员分配的另一种方法。至于晚期,我使用它来声明成员,我不想立即初始化,但也不想使空。请告诉我,如果这是正确的用法或事情是由我改变,如果不是。这是我的代码:
inn
在Redis config类中,我有一个保存Redis端口的属性。
@Value("\${redis.port:63799}")
lateinit var port: Integer
init {
this.redisServer = RedisServer(port.toInt())
}
当我运行我的代码时,我会得到以下错误:
kotlin.UninitializedPropertyAccessException: lateinit property port has not been initialized
我想知道在Kotlin中声明类值的最佳方法是什么(不一定是在性能方面,也在标准方面)。让我用代码来解释,下面是我看到的三种可能性:
private class Player(val editText: EditText, val state: Int, val name: String = editText.text.toString().trim()) {
init{
//we do some code here that read the String 'name'
}
//some other methods
}
private
假设一个项目包含几个类,每个类都有一个静态初始化块。这些区块的运行顺序是什么?我知道,在类中,这样的块是按照它们在代码中出现的顺序运行的。我读过不同的类都是一样的,但是我编写的一些示例代码不同意这一点。我使用了这个代码:
package pkg;
public class LoadTest {
public static void main(String[] args) {
System.out.println("START");
new Child();
System.out.println("END"
我在下面的程序中遇到了一个问题,它有两个类A和B以及类A中的一个方法getObject(),它在类B中被重写,类B扩展了A类。
我从基类构造函数中调用getObject(),我相信它会调用类B中的重写方法,并且在运行时错误是空指针异常,为什么对象没有被初始化,即使它已经初始化了呢?
class A {
Object object = new Object();
public A() {
System.out.println("A Class");
getObject();
}
public void getOb
我创建了以下代码段,并不是我在生产中实际编写的任何代码段,而是为了帮助我理解属性是如何初始化的:
class C {
val a: String = run {
println("init a")
f()
}
val b: String = run {
println("init b: a=$a")
a
}
private fun f(): String {
println("f(): a=$a, b=$b")
以下代码是有效的Kotlin代码:
abstract class A {
protected lateinit var v: X
abstract fun f(): X
class SubA : A() {
override fun f(): X {
return SubX()
}
init {
v = f()
}
}
}
它定义了一个具有lateinit var字段的抽象类和一个设置该字段值的抽象方法。这背后的原因是以后可能会再次调用该方法,
考虑到下面的代码,它运行时没有抛出任何异常。
public class Test1 {
public static int k = 0;
public static Test1 t1 = new Test1("t1");
public static Test1 t2 = new Test1("t2");
public static int i = print("i");
public static int n = 99;
public int j = print("j");
我需要计算硬编码图像的hash。
abstract class ImageData {
protected abstract val master: List<String>
val data: Iterable<HexString> = master.map { s -> hex(s) }
val hash: Int by lazy {
master.fold(0) { hash, s ->
31 * hash + s.hashCode()
}
}
}
示例图像。
ob
目前,我正在研究Kotlin文档中涉及的部分。
下面的片段..。
open class Base(val name: String) {
init { println("Initializing Base") }
open val size: Int = name.length.also { println("Initializing size in Base: $it") }
}
class Derived(
name: String,
val lastName: String
) : Base(name.capitalize
我有一个maven多模块SpringBoot web应用程序。我有一个名为config-模块的子模块,它有一个配置类:
@Configuration
public class PropertiesConfig {
@Bean
public YamlPropertiesFactoryBean errorPropertiesFromYamlFile() {
final YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new Cla
我的应用程序在使用spring和kotlin时遇到了问题。一开始,我有一个控制器和一个服务,如下所示:
以下是该服务:
@Service
class StuffService {
@Inject
lateinit var environment : Environment
fun doStuff() = [HERE FUNCTION CODE USING environment VARIABLE]
}
下面是控制器:
@RestController
class StuffController {
@Inject
lateinit var stuf
--现在用SpringBoot 2.5.1修复了
关于我收到警告的一个小问题。
在发布了2.5.0的SpringBoot之后,我只做了一个版本从2.4.x到2.5.0的提升,没有任何代码更改。
突然,在申请启动时,我得到了
kground-preinit] o.s.h.c.j.Jackson2ObjectMapperBuilder: For Jackson Kotlin classes support please add "com.fasterxml.jackson.module:jackson-module-kotlin" to the classpath
问题是,我的Sp
据我所知,初始化块是一个在任何构造函数之前执行的块,只要构造函数被用来创建object.But,为什么这里的规则是矛盾的……
class SuperClass
{
SuperClass()
{
System.out.println("Super Class constructor");
}
{
System.out.println("Init block of super class");
}
}
class Child extends SuperClass
{
Child()