ja:tutorial:accesswideners
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | ja:tutorial:accesswideners [2022/08/13 09:18] (current) – created skytomo | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Access Wideners ====== | ||
+ | |||
+ | Access Wideners 〔アクセスワイドナー〕は、クラス、メソッド、またはフィールドのアクセス制限を緩和する方法を提供します。 Access Wideners は、一般的に知られているアクセストランスフォーマーに似ています。 | ||
+ | |||
+ | アクセサーミックスインの代わりに Access Wideners を使用することができます。現在、ミックスインによって提供される機能が十分でない場合が 2 つあります: | ||
+ | * 特にミックスイン内のフィールドまたはメソッドをシャドーイングまたはアクセスする目的で、(パッケージの)プライベートクラスにアクセスする必要があります。 | ||
+ | * final メソッドをオーバーライドしたり、 final クラスを継承したりできる。 | ||
+ | * (パッケージの)プライベートコンストラクターのみを使用してクラスをサブクラス化したい場合は、 Access Wideners が適しています。 | ||
+ | |||
+ | 逆コンパイルされたソースにアクセス範囲の広い変更が表示されるようにするには、 '' | ||
+ | |||
+ | ===== 要件 ===== | ||
+ | * Fabric-loader 0.8.0 以降 | ||
+ | * Loom 0.2.7 以降 | ||
+ | |||
+ | ===== ファイル形式 ===== | ||
+ | |||
+ | Mod に含まれるアクセスの変更を定義するために、特定のファイル形式が使用されます。 IDE を支援するには、 '' | ||
+ | |||
+ | ファイルは次のヘッダーで開始する必要があります。 '' | ||
+ | |||
+ | <code [enable_line_numbers=" | ||
+ | accessWidener v1 < | ||
+ | </ | ||
+ | |||
+ | **繰り返しになりますが、すべての場合ではないにしても、ほとんどの場合、名前空間に__名前を付ける__必要があります** | ||
+ | |||
+ | Access Widener ファイルには、# | ||
+ | |||
+ | <code [enable_line_numbers=" | ||
+ | # このようなコメントは、行末までサポートされています | ||
+ | </ | ||
+ | |||
+ | Access Widener ファイルでは、任意の空白を使用して区切ることができます。タブを使用することをお勧めします。 | ||
+ | |||
+ | クラス名は、 '' | ||
+ | |||
+ | 内部クラスの場合、 ''/'' | ||
+ | |||
+ | == クラス == | ||
+ | |||
+ | クラスアクセスは、ヘッダーで定義されたマッピング名前空間に指定されたアクセスとクラス名を指定することで変更できます。 | ||
+ | |||
+ | <code [enable_line_numbers=" | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | - access は // | ||
+ | |||
+ | == メソッド == | ||
+ | |||
+ | メソッドアクセスは、ヘッダーで定義されたマッピング名前空間に指定されているように、アクセス、クラス名、メソッド名、およびメソッド記述子を指定することによって変更できます。 | ||
+ | |||
+ | <code [enable_line_numbers=" | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | - access は // | ||
+ | - className はクラスです | ||
+ | - methodName はメソッド名です | ||
+ | - methodDesc はメソッド記述子です | ||
+ | |||
+ | == フィールド == | ||
+ | |||
+ | フィールドアクセスは、ヘッダーで定義されたマッピング名前空間に指定されているように、アクセス、クラス名、フィールド名、およびフィールド記述子を指定することによって変更できます。 | ||
+ | |||
+ | <code [enable_line_numbers=" | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | - access は // | ||
+ | - className はクラスです | ||
+ | - fieldName はフィールド名です | ||
+ | - fieldDesc はフィールド記述子です | ||
+ | |||
+ | ===== アクセスの変更 ===== | ||
+ | |||
+ | === 拡張可能 === | ||
+ | |||
+ | クラスを拡張したり、メソッドをオーバーライドしたい場合は、 extendable 〔拡張可能〕を使用する必要があります。 | ||
+ | |||
+ | * クラスが public になり final でなくなります | ||
+ | * メソッドが protected になり final でなくなります | ||
+ | |||
+ | メソッドを拡張可能にすると、クラスも拡張可能になります。 | ||
+ | |||
+ | === アクセス可能 === | ||
+ | |||
+ | 別のクラスからクラス、フィールド、またはメソッドにアクセスする場合は、 accessible 〔アクセス可能〕を使用する必要があります。 | ||
+ | |||
+ | * クラスが public になります | ||
+ | * メソッドが public になり、 private なら final になります | ||
+ | * フィールドが public になります | ||
+ | |||
+ | メソッドまたはフィールドをアクセス可能にすると、クラスもアクセス可能になります。 | ||
+ | |||
+ | === ミュータブル === | ||
+ | |||
+ | final フィールドを変更する場合は Mutable を使用する必要があります | ||
+ | |||
+ | * フィールドが final でなくなります | ||
+ | |||
+ | ===== ファイルの場所の指定 ===== | ||
+ | |||
+ | Access Widener ファイルの場所は、 build.gradle と fabric.mod.json ファイルで指定する必要があります。エクスポートされた jar ファイルに含める必要があるため、リソースに保存する必要があります。 | ||
+ | |||
+ | Loom 0.9 以降: | ||
+ | |||
+ | <code groovy [enable_line_numbers=" | ||
+ | loom { | ||
+ | accessWidenerPath = file(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Loom 0.8 以前: | ||
+ | |||
+ | <code groovy [enable_line_numbers=" | ||
+ | loom { | ||
+ | accessWidener = file(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | fabric.mod.json: | ||
+ | |||
+ | <code json [enable_line_numbers=" | ||
+ | ... | ||
+ | |||
+ | " | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== ファイルの検証 ===== | ||
+ | デフォルトでは、存在しない accesswidener エントリは無視されます。 | ||
+ | 最近のバージョンの Loom では、'' | ||
ja/tutorial/accesswideners.txt · Last modified: 2022/08/13 09:18 by skytomo