Nutzen von Importmethoden bei Klasseninstanzen

xYurisha

Mitglied
Hallo zusammen,
Ich hätte eine Frage bezüglich Klasseninstanzen in Verbindung mit Importmethoden.
In meinem aktuellen Programm habe ich in meiner Main-Klasse eine Klasseninstanz von einer Klasse Names "Inventar" angelegt.
Diese Klasse arbeitet wiederum mit einer HashMap, die Ich ja erstmal importieren musste. Das Problem das ich habe und nicht verstehe ist, dass ich trotz instanziieren der Klasse Inventar nicht den HashMap-Befehl .isEmpty(); in der Main-Klasse aufrufen kann, sondern erst in der Inventarklasse nochmals in eine Methode schreiben muss in der, der Befehl steht. Kann mir jemand erklären wieso oder was ich falsch mache ?

Meine Idee war das beim ansprechen von der Klasseninstanz er die Methode isEmpty() kennt da ich sie ja importiert habe, anscheint ist dies aber nicht so.

Danke schon mal für eure Hilfe!

Java:
//MAIN Klasse
package game;

public class Spiel {

    public static void main(String[] args) {
        Item sword = new Item(1,"Schwert");
        Inventar inventar = new Inventar();
        System.out.prinln(inventar.isEmpty()); //Den Abschnitt will er nicht machen da er die Methode anscheinend nicht kennt
        System.out.println(inventar.emptyInv());//Das macht er aber
    }

}

//Klasse Inventar

package game;
import java.util.HashMap;
public class Inventar {
    
private HashMap<Integer, Integer> inv = new HashMap<Integer, Integer>();

    public void addItem(Item item, int amount) {
        if(amount > 0) {
            inv.put(item.get_ID(), amount);   
        }
    }
    
    public boolean emptyInv() {
        return inv.isEmpty();
    }
}
 

LimDul

Top Contributor
Woher soll java wissen, was passieren soll, wenn du inventar.isEmpty() aufrufst? Was ist, wenn du z.B. zwei HashMaps in der Inventar Klasse hast. Oder andere Objekte die eine isEmpty Methode anbieten?

Der Import sorgt nur für eins - dass Java weiß, wenn du HashMap schreibst dass du die Klasse java.util.HashMap meinst.

Hintergrund ist: Java-Klassen haben (analog wie z.B. domains) einen vollqualifizierten Namen. Das ermöglicht es z.B. das du eine eigene Klasse schreibst und sie HashMap nennst. Deine Klasse, die du da geschrieben hast, hat den vollqualifizierten Namen game.Inventar. Man könnte komplett auf Imports verzichten und immer den vollqualifizierten Namen schreiben. Dann sähe dein Code wie folgt aus:

Java:
package game;

public class Spiel {

    public static void main(String[] args) {
        game.Item sword = new game.Item(1,"Schwert");
        game.Inventar inventar = new game.Inventar();
        java.lang.System.out.prinln(inventar.isEmpty()); //Den Abschnitt will er nicht machen da er die Methode anscheinend nicht kennt
        java.lang.System.out.println(inventar.emptyInv());//Das macht er aber
    }

}

//Klasse Inventar

package game;

public class Inventar {
   
private java.util.HashMap<Integer, Integer> inv = new java.util.HashMap<Integer, Integer>();

    public void addItem(game.Item item, int amount) {
        if(amount > 0) {
            inv.put(item.get_ID(), amount);  
        }
    }
   
    public boolean emptyInv() {
        return inv.isEmpty();
    }
}

Das ist offensichtlich schnell nicht mehr lesbar, vor allem wenn die Package-Namen tief verschachtelt werden. Und genau dafür sind Imports da.
 

xYurisha

Mitglied
Woher soll java wissen, was passieren soll, wenn du inventar.isEmpty() aufrufst? Was ist, wenn du z.B. zwei HashMaps in der Inventar Klasse hast. Oder andere Objekte die eine isEmpty Methode anbieten?

Der Import sorgt nur für eins - dass Java weiß, wenn du HashMap schreibst dass du die Klasse java.util.HashMap meinst.

Hintergrund ist: Java-Klassen haben (analog wie z.B. domains) einen vollqualifizierten Namen. Das ermöglicht es z.B. das du eine eigene Klasse schreibst und sie HashMap nennst. Deine Klasse, die du da geschrieben hast, hat den vollqualifizierten Namen game.Inventar. Man könnte komplett auf Imports verzichten und immer den vollqualifizierten Namen schreiben. Dann sähe dein Code wie folgt aus:

Java:
package game;

public class Spiel {

    public static void main(String[] args) {
        game.Item sword = new game.Item(1,"Schwert");
        game.Inventar inventar = new game.Inventar();
        java.lang.System.out.prinln(inventar.isEmpty()); //Den Abschnitt will er nicht machen da er die Methode anscheinend nicht kennt
        java.lang.System.out.println(inventar.emptyInv());//Das macht er aber
    }

}

//Klasse Inventar

package game;

public class Inventar {
  
private java.util.HashMap<Integer, Integer> inv = new java.util.HashMap<Integer, Integer>();

    public void addItem(game.Item item, int amount) {
        if(amount > 0) {
            inv.put(item.get_ID(), amount); 
        }
    }
  
    public boolean emptyInv() {
        return inv.isEmpty();
    }
}

Das ist offensichtlich schnell nicht mehr lesbar, vor allem wenn die Package-Namen tief verschachtelt werden. Und genau dafür sind Imports da.

Stimmt du hast recht, danke! Ich habe das komplett übersehen.
 
G

Gelöschtes Mitglied 62473

Gast
Du vergleichst Birnen mit Äpfeln. Drei workarounds:
1. wrapper Methoden schreiben (am saubersten),
2. Modifier ändern und auf Variable mit. zugreifen (am unsaubersten),
3. HashMap implementieren, also das Interface implementieren oder von ihr erben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
berserkerdq2 Shapes als Buttons nutzen, schlechter Programmierstyle? Allgemeine Java-Themen 1
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
X Java gewerblich nutzen mit externe Bibliothek. Was zu beachten? Allgemeine Java-Themen 18
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
Neumi5694 Best Practice Vorhandene Programminstanz nutzen Allgemeine Java-Themen 3
S Eclipse Github Projekt in eigenes Projekt einbinden und nutzen Allgemeine Java-Themen 13
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
Neumi5694 Offenes Programm nutzen Allgemeine Java-Themen 4
T javax.script (JavaScript): Nicht-JRE-Packages importieren/nutzen Allgemeine Java-Themen 4
S Welche Nutzen bringen Lamda Expressions? Allgemeine Java-Themen 1
B Lua als Konfigurationsdatei nutzen - ein Krampf Allgemeine Java-Themen 4
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
A COM und JAVA nutzen Allgemeine Java-Themen 1
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
D Nutzen, erst deklarieren, oder neu erstellen? Allgemeine Java-Themen 11
S lp_solve mit Java nutzen - Can't find dependent libraries Allgemeine Java-Themen 8
T HTTP HttpWebRequest in Swing-Projekt nutzen Allgemeine Java-Themen 4
M DLL aus jar extrahieren und als lib nutzen Allgemeine Java-Themen 24
G RXTX in proprietärer Software nutzen?! Allgemeine Java-Themen 10
C Variablen Variable einer Klasse in einer anderen Klasse Nutzen Allgemeine Java-Themen 8
thetagman Programmidee: VirtualCorkboard - Evaluation, Nutzen & Meinung Allgemeine Java-Themen 12
D Darf ich jakarta bibliotheken ohne weiteres nutzen? Allgemeine Java-Themen 10
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
C Kann Methode nicht aus Klassenname implements Runnable nutzen Allgemeine Java-Themen 7
G C# DLL in Java nutzen Allgemeine Java-Themen 4
T cpp Programm via jna in java nutzen Allgemeine Java-Themen 3
Meldanor Datei aus jar nutzen Allgemeine Java-Themen 4
J Alte version nutzen Allgemeine Java-Themen 4
M Rechenweg in Datenbank speichern und nutzen Allgemeine Java-Themen 6
G konstanter String[] laesst sich nicht in Annotation nutzen Allgemeine Java-Themen 2
G Variable global nutzen Allgemeine Java-Themen 4
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
H StartupFolder nutzen! Aber wie? Allgemeine Java-Themen 4
D Einfaches Nutzen von Plugins mittels generischer Methode Allgemeine Java-Themen 3
V Setter zum Berechnen nutzen? Allgemeine Java-Themen 5
G Was nutzen statt Mehrfachvererbung? Allgemeine Java-Themen 7
R Wie Google & Co mit Java nutzen? Allgemeine Java-Themen 16
W InputStream öfters nutzen Allgemeine Java-Themen 9
H einzelner Thread --> Nutzen?! Allgemeine Java-Themen 3
L Wie Pattern anwenden um Cipher zu nutzen Allgemeine Java-Themen 2
G DB connection in anderen Klassen nutzen! Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
E NT-Anmeldung in Java Client-Applikation nutzen. JAAS ? Allgemeine Java-Themen 5
M java api offline nutzen? Allgemeine Java-Themen 4
J COM-Port unter Windows nutzen Allgemeine Java-Themen 2
B Programm unter GPL nutzen Allgemeine Java-Themen 6
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
T GPL Code inkommerzieller Software nutzen? Allgemeine Java-Themen 26
G Funktionstasten nutzen Allgemeine Java-Themen 3
S Klassen aus JDK 1.5. außerhalb von 1.5. nutzen Allgemeine Java-Themen 6
S MediaTracker nutzen um festzustellen ob schreibvorgang ende. Allgemeine Java-Themen 5
M Webstart nutzen? Allgemeine Java-Themen 9
thE_29 Externe (unbekannte) Klasse nutzen Allgemeine Java-Themen 11
P DLLs nutzen Allgemeine Java-Themen 3
C Deserialisieren von unterschiedlichen Klasseninstanzen Allgemeine Java-Themen 13

Ähnliche Java Themen


Oben