Wie schließen Sie Dateien in Java ein?

8

Ausgehend von einer C ++ - Umgebung habe ich mich daran gewöhnt, viele der Funktionen, die ich brauchte, in eine funcs.h -Datei aufzuteilen und dann #include "funcs.h" und dann die Funktionsprototypen in die .cpp-Hauptdatei einzufügen. Jetzt fange ich an, mit Java zu arbeiten (hauptsächlich mit minecraft ModloeaderMp) und ich habe bereits eine funcs.java -Datei gemacht, wo es einige vorgefertigte Funktionen gibt (z. B. einige Funktionen zum Kopieren von Dateien, Stapel von Gegenständen usw.). Da ich bereits die Anweisung Public class mod_mine extends BaseModMp verwende, gibt es eine Möglichkeit, die Funktionen zu importieren oder kann ich einfach noch eine Public class mod_mine extends funcs machen?

    
MrJackV 12.10.2011, 09:15
quelle

6 Antworten

18

Sie haben nicht #include in Java, Sie import package.Class . Seit Java 6 (oder war es 5?), Können Sie auch import static package.Class.staticMethodOfClass , was einige Formen von dem, was Sie versuchen, erreichen würde.

Wie auch @duffymo bemerkt, speichert import nur, dass Sie die importierten Klassennamen nicht systematisch mit dem Paketnamen oder den importierten statischen Methodennamen mit dem Paket- und Klassennamen voranstellen. Die eigentliche #include Semantik existiert in Java überhaupt nicht.

Das heißt, eine "funcs.java" -Datei zu haben scheint mir so, als ob du anfängst, deine Zehen in einige Anti-Muster zu tauchen ... Und du solltest dich von diesen fernhalten.

    
Romain 12.10.2011, 09:21
quelle
9

Es gibt kein #include in Java.

Ich möchte kein Design mit funcs.java , in dem alle Variablen gespeichert sind. Objekte sind Zustand und Verhalten in einer einzigen Komponente gekapselt. Sie entwickeln nicht in einer objektorientierten Weise, wenn Sie das tun.

Gute Namen sind wichtig. Eine Klasse namens Stuff , die Stuff2 erweitert, sollte besser ein schlechtes Beispiel sein.

Das ist nicht gut Java. Ich würde es auch nicht als gutes C ++ bezeichnen.

    
duffymo 12.10.2011 09:19
quelle
3

Java ist eine objektorientierte Programmiersprache und es gibt einen Grund dafür.

Es gibt kein # include in Java, obwohl Sie Klassen aus anderen Paketen importieren können. Die separate Klasse func.java zum Speichern von Variablen zu erstellen, ist möglicherweise keine gute Idee, solange oder bis alle Konstanten sind. Wenn Sie eine Klasse erweitern, können Sie die Funktion erneut verwenden. aber erfüllt die Erweiterungsklasse den IS-A-Test, wenn nicht, dass dies eine schlechte Idee wäre.

Wenn man von C ++ ausgeht, kann es hilfreich sein, ein gutes Buch zu lesen, zB Head First Java.

    
Zohaib 12.10.2011 09:27
quelle
3

Klingt so, als würden Sie alle Ihre Methoden in dieselbe Klasse stellen. Sie sollten sie trennen:

Hilfsklassen

Diese sollten statische Methoden enthalten, die beispielsweise den Inhalt einer Datei abrufen, einen Dialog anzeigen oder zwei Zahlen hinzufügen. Sie gehören nicht wirklich in eine Objektklasse, sie benötigen keine Instanzen und werden im gesamten Programm verwendet. Ein gutes Beispiel dafür finden Sie java.lang.Math / p>

Konstante Klassen- oder Konfigurationsdateien

Dies kann eine Constants Klasse sein, die static final Mitglieder enthält, wie PI = 3.1415 . Sie können auf sie mit Constants.PI zugreifen.

Oder Sie können Konfigurationsdateien verwenden und diese in Configuration laden und auf die Konfigurationsvariablen mit etwas wie config.get("database")

zugreifen

Andere

Wenn Ihr Code nicht in diese passt, sollten Sie ihn in eine Klasse einfügen, damit Ihr Code zu objektorientierte Programmierkonzepte . Aus Ihrer Frage klingt es, als würden Sie darüber nachlesen wollen. Ich würde zuerst Head First Java lesen, dann vielleicht einige andere Bücher auf objektorientierte Programmierung in Java . Danach würde ich mir einige Designmuster ansehen.

    
skyuzo 12.10.2011 09:25
quelle
2

Es gibt kein # include in Java. Sie können die import-Anweisung verwenden, um Klassen und Schnittstellen in Ihrer Datei verfügbar zu machen.

    
user496934 12.10.2011 09:28
quelle
0

Eigentlich ... Es gibt eine Möglichkeit, die gleiche Semantik zu haben wie in Cs #include (das Schlüsselwort wurde später von C ++ ausgeliehen, um schick auszusehen ...). Es ist einfach nicht mit den gleichen Worten definiert, aber es macht genau das, wonach Sie suchen.

Sehen wir zuerst, was Sie mit #include in C ++ machen, um die Frage zu verstehen:

  • include #defines ,
  • "forward" -Funktionsdefinitionen (ihr "Körper" wird an anderer Stelle definiert, in einer Klassenimplementierung, wenn Sie sich an Turbo Pascal erinnern, bekommen Sie meinen Punkt),
  • definieren Strukturen,

und das ist es ziemlich genau.

Für die Strukturdefinitionen gibt es keinen Sinn, das ist Old-School C: In C ++ definierst du struct {} nicht mehr für Zeitalter, du definierst class -Strukturen mit Eigenschaften und Accessor-Methoden, es ist dasselbe in Java : no typedef struct {} auch hier.

Dafür haben Sie die Deklaration "interface", siehe Ссылка

Es macht genau das, wonach Sie suchen:

%Vor%

Dann zu verwenden:

%Vor%

Lesen Sie den obigen Link, es ist voll von nützlichen Fällen.

    
догонят 23.07.2015 14:28
quelle

Tags und Links