電磁界コースは理論的に抽象的で数学的計算が複雑です。ANSYSソフトウェアを教育に導入し、有限要素分析法を使用して、典型的な電場のシミュレーション設計を行い、電場の特性をシミュレートし、理論と実践を効果的に組み合わせることで、電場の理解を深めることができます。そしてアプリケーション。この論文では、分析用の同軸ケーブルの典型的な電磁場を選択し、ANSYS-Maxwellソフトウェアを使用して2Dモデリングと有限要素分析を実行し、その安定した磁場と電場の分布特性と法則を取得します。
ファイル:n459.com/file/25127180-478939902
以下は関係ありません。
- - - - - - - - - - - - - - - - - - - - - -境界線 - - - ----------------------------------------
JAVA列挙はあなたが思っているよりも便利です!
オブジェクトの潜在的な値のセットを表すために、Javaで列挙を使用していることに気付くことがよくあります。
コンパイル時にタイプが持つことができる値を決定する機能は、コードに構造と意味を提供する強力な機能です。
列挙について最初に知ったとき、それらは定数に名前を付けるための単なるツールであり、静的定数文字列ENUM_VAL_NAMEに簡単に置き換えることができると思いました。
それから私は自分が間違っていることに気づきました。事実は、Java列挙には非常に高度な機能があり、コードをクリーンにし、エラーが発生しにくく、強力にすることができることを証明しています。
Javaの高度な列挙機能のいくつかと、これらの機能を使用してコードをより単純で読みやすくする方法を見てみましょう。
列挙はクラスです!
Javaでは、列挙はObjectのサブクラスです。すべての列挙型の基本クラスであるEnum(簡潔にするために変更)を見てみましょう。
パブリック抽象クラスEnum <E extends Enum>
は、Constable、Comparable、Serializableを実装します{ private final String name;
public final String name(){ 戻り名; }
private final int ordinal;
public final int ordinal(){ return ordinal; }
protected Enum(String name、int ordinal){ this.name = name; this.ordinal = ordinal; }
public String toString(){ 名前を返す; }
public final boolean equals(Object other){ return this == other; }
public final int hashCode(){ return super.hashCode(); }
public final int compareTo(E o){ Enum <?> other =(Enum <?>)o; 列挙型self = this; if(self.getClass()!= other.getClass()&& //最適化self.getDeclaringClass()!= other.getDeclaringClass())throw new ClassCastException(); self.ordinalを返す-other.ordinal; } }
ご覧のとおり、これは基本的に、nameとordinalの2つのフィールドを持つ通常の抽象クラスです。
したがって、列挙はすべてクラスであるため、通常のクラスの多くの特性があります。
列挙用のインスタンスメソッド、コンストラクター、およびフィールドを提供できます。toString()をオーバーライドすることはできますが、hashCode()またはequals(Object other)をオーバーライドすることはできません。
次に、列挙の例であるOperationを見てみましょう。
列挙型演算{ 加算、減算、乗算}
この列挙は、操作が2つの値で実行でき、結果を生成することを示しています。この機能の実装方法に関して、最初のアイデアは、次のようにswitchステートメントを使用することです。
public int apply(Operation operation、int arg1、int arg2){ switch(operation){ case ADD:return arg1 + arg2; ケースの減算:arg1を返す--arg2; case MULTIPLY:return arg1 * arg2; デフォルト:新しいUnsupportedOperationException();をスローします。} }
もちろん、このようにいくつかの問題があります。
最初の問題は、enumオペレーションに新しいオペレーションを追加した場合、スイッチが新しいオペレーションを正しく処理できないことをコンパイラが通知しないことです。
さらに悪いことに、怠惰な開発者が別のクラスのコードをコピーまたは書き直した場合、それを更新できない可能性があります。
2番目の問題はデフォルトのデフォルトです。これはすべてのプログラムで必要ですが、正しいコードでは発生しないことがわかっています。
これは、Javaコンパイラが上記の最初の問題を認識しており、それを知らなくてもOperationに新しい列挙を追加できることを確認したいためです。
幸い、Java 8は機能プログラミングを使用して、クリーンなソリューションを提供してくれます。
関数列挙の実装
列挙はクラスであるため、操作を実行する関数を格納するための列挙フィールドを作成できます。
しかし、解決策を見つける前に、いくつかのリファクタリングを見てみましょう。
まず、スイッチをenumクラスに入れましょう。
列挙型演算{ 加算、減算、乗算;
public static int apply(Operation operation、int arg1、int arg2){ switch(operation){ case ADD:return arg1 + arg2; ケースの減算:arg1を返す--arg2; case MULTIPLY:return arg1 * arg2; デフォルト:新しいUnsupportedOperationException();をスローします。} } }
これを行うことができます:Operation.apply(Operation.ADD、2、3);
現在、Operationからメソッドを呼び出しているため、次のように、Operation.apply()を使用する代わりに、インスタンスメソッドに変更し、これを使用できます。
public int apply(int arg1、int arg2){ switch(this){ case ADD:return arg1 + arg2; ケースの減算:arg1を返す--arg2; case MULTIPLY:return arg1 * arg2; デフォルト:新しいUnsupportedOperationException();をスローします。} }
次のように使用します。Operation.ADD.apply(2、3);
見栄えがします。それでは、さらに一歩進んで、機能プログラミングを使用してswitchステートメントを完全に排除しましょう。
列挙型演算{ ADD((x、y)-> x + y)、SUBTRACT((x、y)-> x --y )、MULTIPLY((x、y)-> x * y);
Operation(BiFunction<Integer, Integer, Integer> operation) {
this.operation = operation;
}
private final BiFunction<Integer, Integer, Integer> operation;
public int apply(int x, int y) {
return operation.apply(x, y);
}
}
私がここでしたことは:
フィールドBiFunction <Integer、Integer、Integer>が追加されます
。OperationはBiFunctionを使用して、Operationのコンストラクターを作成します。
列挙定義でコンストラクターを呼び出し、ラムダを使用してBiFunction <Integer、Integer、Integer>を指定します。
java.util.function.BiFunction操作フィールドは、2つのパラメーターを受け取る関数(メソッド)への参照です。
この例では、両方のパラメーターがint型であり、戻り値もint型です。残念ながら、Javaパラメータ化型はプリミティブをサポートしていないため、整数を使用する必要があります。
BiFunctionには@functioninterfaceの注釈が付けられているため、Lambda表記を使用してBiFunctionを定義できます。
この関数は2つのパラメーターを受け入れるため、(x、y)を使用してそれらを指定できます。
次に、-> x + yを使用して値を返す1行のメソッドを定義しました。これは次の方法と同等ですが、より簡潔です。
クラスAdderはBiFunction <Integer、Integer、Integer> { @Override public Integer apply(Integer x、Integer y){ return x + y; } }を実装します。新しいOperation実装は、同じアプローチを使用します:Operation.ADD.apply(2、 3);。
ただし、新しい操作が追加されたときにコンパイラが通知するため、この実装の方が優れています。これには、新しい関数を更新する必要があります。これがないと、新しい操作を追加するときにswitchステートメントを更新することを忘れた場合、UnsupportedOperationException()が発生する可能性があります。
重要なポイント
Enum列挙は、Enumの拡張クラスです。
列挙型列挙には、フィールド、コンストラクター、およびインスタンスメソッドを含めることができます。
列挙型列挙フィールドは関数を格納できます。ラムダと組み合わせて使用すると、クリーンで安全な列挙型固有の関数実装を作成し、(スイッチを使用する代わりに)コンパイル時にそれらを適用できます。