Jaka jest różnica między "const" a "val"?
Ostatnio czytałem o const
słowo kluczowe, i jestem bardzo zdezorientowany! Nie mogę znaleźć żadnej różnicy między nim a słowem kluczowym val
, chodzi mi o to, że możemy użyć obu z nich do stworzenia niezmiennej zmiennej, czy jest coś jeszcze, czego mi brakuje?
3 answers
const
S są stałymi czasu kompilacji. Co oznacza, że ich wartość musi być przypisana podczas kompilacji, w przeciwieństwie do val
s, gdzie można to zrobić w czasie wykonywania.
Oznacza to, że const
S nigdy nie może być przypisana do funkcji lub konstruktora klasy, a jedynie do String
lub prymitywu.
Na przykład:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-07 15:06:49
Żeby dodać do odpowiedzi luki:
Stałe Czasu Kompilacji
Właściwości, których wartość jest znana w czasie kompilacji, mogą być oznaczone jako stałe czasu kompilacji przy użyciu modyfikatora const. Takie właściwości muszą spełniać następujące wymagania:
- najwyższy poziom lub członek obiektu
- inicjalizowana wartością typu String lub typem prymitywnym
- No custom getter
Źródło: Oficjalne dokumentacja
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 14:48:23
Możesz przekształcić Kotlina w Javę. Następnie możesz zobaczyć constma jeszcze jeden staticmodyfikator niż val. Taki prosty kod.
Kotlin:
const val str = "hello"
class SimplePerson(val name: String, var age: Int)
Do Java(Część):
@NotNull
public static final String str = "hello";
public final class SimplePerson {
@NotNull
private final String name;
private int age;
@NotNull
public final String getName() {
return this.name;
}
public final int getAge() {
return this.age;
}
public final void setAge(int var1) {
this.age = var1;
}
public SimplePerson(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.age = age;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-12 08:37:00