C++環境から来て、必要な関数の多くをfuncs.h
ファイルに分割し、#include "funcs.h"
を実行して、関数のプロトタイプをメインの.cppファイルに追加することに慣れました。 Java(主にminecraft ModloeaderMp)で)作業を開始し、いくつかの事前作成された関数(ファイルコピー用のいくつかの関数など)があるfuncs.Java
ファイルをすでに作成しました。アイテムなど)。既にステートメントPublic class mod_mine extends BaseModMp
を使用しているので、関数をインポートする方法はありますか、または別のPublic class mod_mine extends funcs
を実行できますか?
あなたはしません#include
Javaでは、あなたimport package.Class
。 Java 6(または5でしたか?))なので、import static package.Class.staticMethodOfClass
、これはあなたがやろうとしていることのいくつかの形を達成するでしょう。
また、@ duffymoが述べたように、import
は、インポートされたクラス名にパッケージ名のプレフィックスを付けること、またはインポートされた静的メソッド名にパッケージ名とクラス名をプレフィックスとして付けることのみを保存します。実際の#include
セマンティクスがJava-にまったく存在しません。
とは言っても、 "funcs.Java"ファイルがあると、つま先をいくつかのアンチパターンに浸し始めているように見えます...そして、これらに近づかないでください。
Javaには#include
はありません。
すべての変数を格納するfuncs.Java
のあるデザインは好きではありません。オブジェクトは、単一のコンポーネントにカプセル化された状態と動作です。そうした場合、オブジェクト指向の方法で設計しているわけではありません。
良い名前は重要です。 Stuff2
を拡張するStuff
という名前のクラスは、悪い例である方がよいでしょう。
それは良いJavaではありません。私もそれが良いC++だとは思わないでしょう。
すべてのメソッドを同じクラスに入れているように思えます。それらを分離する必要があります:
ユーティリティクラス
これらには、ファイルのコンテンツの取得、ダイアログ画面の表示、2つの数値の加算などの処理を行う静的メソッドが含まれている必要があります。それらは実際にはオブジェクトクラスに属しておらず、インスタンスを必要とせず、プログラム全体で広く使用されています。この良い例については Java.lang.Math を参照してください。
定数クラスまたは構成ファイル
これは、_static final
_のような_PI = 3.1415
_メンバーを含むConstants
クラスにすることができます。 _Constants.PI
_を使用してそれらにアクセスできます。
または、構成ファイルを使用してそれらをConfiguration
にロードし、config.get("database")
のようなもので構成変数にアクセスできます。
その他
コードがこれらのいずれにも当てはまらない場合は、コードが オブジェクト指向プログラミングの概念 に適合するように、いくつかのクラスにコードを配置する必要があります。あなたの質問から、あなたはこれについて読みたいと思うでしょう。私は最初に Head First Java を読んでから、多分 Javaのオブジェクト指向プログラミング に関する他の本を読むでしょう。その後、いくつかの デザインパターン を確認します。
Javaはオブジェクト指向プログラミング言語であり、それには理由があります。
Javaには#includeはありませんが、他のパッケージからクラスをインポートできます。変数を格納するために別のクラスfunc.Javaを作成することは、それらがすべて定数になるまで、または定数でない限り、良い考えではないかもしれません。あるクラスを拡張することにより、uは関数を再利用できます。しかし、拡張クラスはISテストに合格します。そうでない場合、これは悪い考えかもしれません。
C++から移行する場合は、Head First Javaのように、いくつかの良い本を読んでみると非常に役立ちます。
Javaには#includeはありません。importステートメントを使用して、クラスとインターフェースをファイルで使用できるようにすることができます。
JavaファイルでCプリプロセッサを実行できます。-Pフラグを使用して、行の注釈を無効にしてください。Googleをすばやく検索すると、これが2回以上試行され、さらには使用されていることが確認されます。人気のあるfastutilライブラリ:
これはすべてのディレクティブ(#include、#define、#ifdefなど)で機能し、構文的にも意味的にもC/C++の同等のステートメントと同じです。
実際に... Cの#includeと同じセマンティクスを持つ方法があります(このキーワードは、見栄えをよくするために後でC++から借用されました)。それは同じ言葉で定義されていないだけでなく、まさにあなたが探しているものを実行します。
最初に、質問を理解するためにC++で#includeをどのように処理するかを見てみましょう。
#defines
を含める、それでおしまいです。
構造定義については意味がありません。それは古いCです。C++では年齢に対してstruct {}
をもう定義せず、プロパティとアクセサメソッドを使用してclass
構造を定義します。同じです。 Javaの場合:typedef struct {}
もここにはありません。
これについては、「インターフェース」宣言があります。 https://docs.Oracle.com/javase/tutorial/Java/IandI/createinterface.html を参照してください
それはあなたが探しているものを正確に実行します:
public interface MyDefines {
final CHAR_SPACE : ' '; // ugly #define
int detectSpace(FileInputStream fis); // function declaration
// and so on
}
次に、使用するには:
public class MyClass extends MyAncestor implements MyDefines {
...
// implementation of detectSpace()
int detectSpace(FileInputStream fis) {
int ret = 0;
char Car;
if((Car = fis.read()) != -1) && (Car == CHAR_SPACE)) ret++;
...
}
上記のリンクを読んでください。役立つケースがたくさんあります。