AndroidStudio mag mich wohl nicht

Darüber kann man streiten.

Besser nicht , dann würde der Thread OT explodieren :)

Du bist aber noch an Kotlin dran und wie die das jetzt ggf. umsetzen ?
 
möchte noch sagen das Android mit einen Java ähnlichen Framework erst viel später als java kam.
Und am anfang sehr , sehr wenig Speicher hatte. Und da kam die Idee von Java und GC wohl gerade recht.
Da müssen wir wohl durch.
[doublepost=1563523924,1563523646][/doublepost]
Ja werde ich bleiben kann arber etwas dauern.
Mit kotlin arbeite ich nur so nebenbei.
wie man es umsetzt habe ich schon gegeben nur was der GC macht interessiert mich bzw wie er das in Java abbildet
 
Zuletzt bearbeitet:
@swa00

"klappe halten" auf KEINEN FALL.
Ich hatte daraufhin ja mal selbst tests gemacht indem ich z.b. eine neue activity aufgemacht hatte und dort zugriff auf den wert wollte und es nichtmehr klappte. Daraufhin hab ich da bißchen was umgerüstet und schon konnten alle activities an den wert der variable ran.

Allerdings macht ihr mich noch echt verrückt mit singleton und Co. ;-)

Meine MyGlobalVars.kt sieht jetzt pimaldaumen so aus

class MyClass{
companion object {
var globalVar = "I am a global Variable";
var textSwitcher = 0;
var speedMode=0;
}
}

und in anderen kt nehm oder setz ich die variablen mit

MyClass.textSwitcher++; oder
x = MyClass.speedMode;

keinen blaßen dunst ob das jetzt singleton ist oder nicht.
nächstes bauprojekt VERSTEHEN wie das mit arrays funktioniert. im php zaubere ich locker vom hocker mehrdimensionale arrays und hier blick ich erstmal nicht durch was der von mir will. Wollt eigentlich (erstmal eindimensional) Variable[0]="A", Variable[1]="B" usw.,bin schon über charArrayof,intArrayof uvm. gestolpert aber AS liebt es mir ROT zu zeigen. eigentlich wollt ich mit arrays eher mal in die richtung gehen

php-stil
Variable[0]=array("Feld1"=>"blablaaa","Feld2"=>"blabla2","Feld3"=>array("wert1","wert2",wert3) )

im grund müßt das doch charArrayof werden, AS kackt aber wohl noch über den syntax rum oder sowas ähnliches.

und was noch keiner ahnt von euch, ich werd wohl mal ne DB brauchen, da stellen sich aber wieder paar fragen, die ich so noch nie im netz beantwortet gelesen habe.
 
Hallo

Nein ein Singleton ist das nicht ist in Kotlin ach etwas anders als in Java
Da ist der Link von swa00 vielleicht nicht das richtige denn der erklärt es in Java und nicht Kotlin was du wohl schreiben willst.
Suche da mal nach Singleton patternund Kotlin.

Singleton pattern in Kotlin


Statische Array sind in Kotlin auch etwas anders als in Java.
var myArray1 = arrayOf(1,10,4,6,15)
var myArray2 = arrayOf<Int>(1,10,4,6,15)
val myArray3 = arrayOf<String>( Maria","Michel","John","Anne")

Ich stimme auch mit swa00 überein das es besser ist dynamisch zu arbeiten also anstat Array Listen zu benutzen.
wie das in Java geht siest du in dem Link von swa00.
Kotlin ich denke da kannst du selber mal im Netz schauen wie das geht und welche Varianten es gibt.


In Kotlin ist einiges anders als in Java oder auch PHP. Du hast dich nun mal dazu entschieden mit Kotlin zu arbeiten. Also solltest du auch im Netz nach Kotlin suchen und nicht nach Java.
Kotlin ist noch nicht so stark verbreitet und suche sowie Hilfe ist auch manschmal etwas sehrer zu bekomme, das die meisten noch mit Java arbeiten.


Wollt eigentlich (erstmal eindimensional) Variable[0]="A", Variable[1]="B"

Das ist erst mal keine Definition der Variablen weder Java noch Kotlin.
Das ist eine Wert Zuweisung eines einzelnen Elementes in dem Array.

in java wäre das so
String[] meinArray = new String[5];
und nun kannst du auch auf die 5 Elemente zugreifen, wei gesagt das ist Java.


Kotlin arrays tutorial - working with arrays in Kotlin
[doublepost=1563648186,1563646762][/doublepost]Nur mal so als Tipp lasse die vergleiche mit PHP sondern lernen Java oder Kotlin von Anfang an.
Damit meine ich die Grundlagen einer der beiden Sprachen.
Dazu gehört auch sowas wie Arrays vorfallen die Definition von Variablen Objekten.

Java, Kotlin ist eine stark statisch typisierte Programmiersprache
PHP ist eine Scriptsprache und eine dynamische Programmiersprache

Also in Java Kotlin ist eine Definition, Initialisierung, Instanziierung wichtig.

Ein gewisses Grundlagen Wissen ist in jeder Sprache wichtig.

Normal so nebenbei in Kotlin gibt es keine primitiven Datentypen mehr wie in Java gibt nur noch Klassen Objekte.
 
Zuletzt bearbeitet:
in meiner MyGlobalVars hab ich ne zeile gemacht:

val daylist = mutableListOf("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Sonnabend","Sonntag")

und in den activityScripten komm ich dort z.b. mit sowas auch ran

textRotation.text=MyClass.daylist[MyClass.town_daynum];
 
Schön und was willst du uns damit sagen wo ist dein Proplem?
Das ist kein statisches Array das ist eine dynamische Liste.
 
war doch richtig daß arrays an sich iwie in ihrem inhalt "nicht erweiterbar sind" während aber Listen flexibler als Arrays sind, wobei aber eigentlich beide ein-oder mehrdimensional angelegt sein können. Eine Liste ist ja im grunde nichts anderes als ein array, nur flexibler.

Den beitrag über dieses singleton-zeug hab ich mir auch mal durchgelesen und ich fasse daß eher beinahe so auf daß es eigentlich bei den variablen um's nackte überleben geht weil das betriebssystem denen schneller den gar ausmachen kann als man als progger kucken kann. Was ich da aufgeschnappt habe,ist, daß man iwie seine variablenwerte in einer applicationsebene ablegen sollte um ihnen die längstmögliche lebensdauer zu ermöglichen. Ich hoffe daß ich das halbwegs richtig aufgeschnappt habe, sonst gibts wieder nur "tausende" links zum nachlesen.
 
Array und Liste ist nicht das gleiche. Stimmt in Kotlin sind beides Klassen in Java aber nicht.
Wenn du dir mal ansiest wie eine Liste unter der Haube funktioniert .
Eine Liste , Collection ist im Gegensatz zu einem statischen Feld eine einfach oder doppelt verkettete Liste.

Das mit Singleton ist in etwa richtig.
Nur das eher mit Instanzen zu tun hat als mit Applikationen Ebene.
In Java ist das an dem new leichter zu erkennen als in Kotlin, denn das gibt es nicht mehr.


Eigentlich sind wir hier ein Forum das fragen behandelt und nicht für Grundlagen fragen zuständig ist.
Deshalb auch meine frage was du uns damit sagen willst.
 
Zuletzt bearbeitet:
Hallo @swa00 bin dir ja noch etwas schuldig.

Also ich würde sagen das Kotlin ein Companion Objekt in eine Singleton Klasse konvertier abbildet.

Ich habe mal Kotlin in ByteCode und ByteCode wieder in Java übersetz. Und sieh da, für mich sieht das nach Singleton Prinzip aus. Es wird auch eine Instanz mit new vom Companion Objekt erzeugt und in einer statischen Variablen gespeichert.


Wie ja nun bekannt das ein singleton Objekt am längsten im System bleibt. Haben sich wohl die Entwickler von Kotlin zu dieser Lösung entschieden. Denn static von Java wollten sie nicht mehr unterstützen aus den bekannten Gründen aus Java. Deshalb gibt es „static“ auch nicht in Kotlin.

Dafür haben sie den TopLevel bereich geschaffen der ähnlich zu einer Kasse mit static Objekten ist. Diese Objekt sind nur in gleichen Packet sichtbar.



Wie ich auch schon mal sagte kam das Companion Objekt erst später dazu. Die Entwickler haben sicher gemerkt das sie einen Workaround brauchen der das Problem „static“ löst. Und entwickelten das Companion Objekt.

Kotlin wollte und will ja einige Fehler, Probleme die Java hat beseitigen und dies in den gleichen Bytecode um setzen. Auch will Kotlin mit weniger Schreibarbeit für den Programmierer auskommen das scheint auch gelungen zu sein. Wobei ich Java immer noch etwas übersichtlicher finde, auch wenn ich mehr Tippen muss. Vielleicht sehe ich das auch irgendwann mal anders.


So hier der Quellcode in Kotlin und das was daraus in Java übersetz wurde.

Code:
package com.jw.statickotlin

import android.support.v7.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        StaticKlasse.meineVariable = 1
    }
}

Code:
package com.jw.statickotlin;

import kotlin.Metadata;
import kotlin.jvm.internal.DefaultConstructorMarker;

@Metadata(
   mv = {1, 1, 15},
   bv = {1, 0, 3},
   k = 1,
   d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0003\u0018\u0000 \u00032\u00020\u0001:\u0001\u0003B\u0005¢\u0006\u0002\u0010\u0002¨\u0006\u0004"},
   d2 = {"Lcom/jw/statickotlin/StaticKlasse;", "", "()V", "Companion", "app_debug"}
)
public final class StaticKlasse {
   private static int meineVariable;
   public static final StaticKlasse.Companion Companion = new StaticKlasse.Companion((DefaultConstructorMarker)null);

   @Metadata(
      mv = {1, 1, 15},
      bv = {1, 0, 3},
      k = 1,
      d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0005\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002R\u001a\u0010\u0003\u001a\u00020\u0004X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0005\u0010\u0006\"\u0004\b\u0007\u0010\b¨\u0006\t"},
      d2 = {"Lcom/jw/statickotlin/StaticKlasse$Companion;", "", "()V", "meineVariable", "", "getMeineVariable", "()I", "setMeineVariable", "(I)V", "app_debug"}
   )
   public static final class Companion {
      public final int getMeineVariable() {
         return StaticKlasse.meineVariable;
      }

      public final void setMeineVariable(int var1) {
         StaticKlasse.meineVariable = var1;
      }

      private Companion() {
      }

      // $FF: synthetic method
      public Companion(DefaultConstructorMarker $constructor_marker) {
         this();
      }
   }
}
[doublepost=1563708496,1563706289][/doublepost]Eine im TopLevel Bereich erstellte Variable wird so übersetz.
Es wird eine einfache static Klassen Variablen erstellt ohne einer Instanz der Klasse.

Das ist ja nicht die sinnvollste Lösung für Android wie bekannt ist.
Deshalb wird es wohl den Workaround gegeben haben mit Companion.
Denn den Toplevel Bereich gab es von Anfang an in Kotlin.

var topLevel: Int = 0

Code:
public final class StaticKlasseKt {
   private static int topLevel;

   public static final int getTopLevel() {
      return topLevel;
   }

   public static final void setTopLevel(int var0) {
      topLevel = var0;
   }
}
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: deek

Ähnliche Themen

ConfusingFutureGames
  • ConfusingFutureGames
Antworten
6
Aufrufe
1.853
ConfusingFutureGames
ConfusingFutureGames
Zurück
Oben Unten