誰かが拡大変換または縮小変換を使用する理由を説明していただけますか?私はこれらについてたくさん読んだことがありますが、誰も私に実用的な例を与えてくれません。ありがとう!拡大/縮小変換の実際のアプリケーションですか?
答えて
(Java)拡大および縮小変換は、関連するタイプ間の変換に関係します。例えば、抽象的な(スーパー)クラスとその(子)サブクラスの間の関係を取る。 java.lang.Numberクラス(抽象クラス)と直接サブクラスIntegerを使用しましょう。ここでは、持っている:
(superclass) Number
__________/\__________
/ | | \
(concrete subclasses) Integer Long Float Double
拡大変換は:我々は、特定のタイプ(サブクラス)を取り、以下の特定のタイプ(スーパークラス)にそれを割り当てようとすると発生します。
Integer i = new Integer(8);
Number n = i; // this is widening conversion; no need to cast
絞り込み変換:私たちは以下の特定のタイプ(スーパークラス)に乗り、明示的なキャストが必要で、より具体的なタイプ(サブクラス)、に代入しようとしたときに発生します。
Number n = new Integer(5); // again, widening conversion
Integer i = (Integer) n; // narrowing; here we explicitly cast down to the type we want - in this case an Integer
あなたがそのようにClassCastExceptionsように注意する必要がある特定の問題があります。これを処理する
Integer i = new Integer(5);
Double d = new Double(13.3);
Number n;
n = i; // widening conversion - OK
n = d; // also widening conversion - OK
i = (Integer) d; // cannot cast from Double to Integer - ERROR
// remember, current n = d (a Double type value)
i = (Integer) n; // narrowing conversion; appears OK, but will throw ClassCastException at runtime - ERROR
一つの方法は、instanceof
キーワードでif
ステートメントを使用することです:
if(n instanceof Integer) {
i = (Integer) n;
}
なぜこれを使用しますか?たとえば、あるプログラムの人事の階層を作っていて、「Person」という名のファーストクラスと、「Student」、「Teacher」、「Secretary」などのサブクラスがあるとします。最初に一般的な人物を作成し、それをconstructorに設定されたstudenIDのための追加の可変フィールドを持つStudentに(継承を介して)割り当てることができます。あなたにもそのタイプのより一般的な(広い)をパラメータとして入力し、取り扱うすべてのサブクラスをとり、単一の方法で使用することができます。
public static void main(String[] args) {
Person p = new Student("John", "Smith", 12345);
printInfo(p);
}
// this method takes the wider Person type as a parameter, though we can send it a narrower type such as Student if we want
public static void printInfo(Person p) {
System.out.println("First: " + p.getFirstName());
System.out.println("Last: " + p.getLastName());
if (p instanceof Student) {
System.out.println((Student)p).getStudentID()); // we cast p to Student with Narrow Conversion which allows us to call the getStudentID() method; only after ensuring the p is an instance of Student
}
}
私は、これは物事を処理するための理想的な方法ではないかもしれない実現しますが、ために私はそれがいくつかの可能性を示すのに役立つと思ったデモンストレーションのために。専門 - - >それはあなたが、より一般的になっているとき、拡幅として知られ、一般化
一部のコードで、真偽値を含むint
が返された場合は、正しく表現されているbool
に短縮することができます。
逆の操作もできます。
アスキー値との比較を行うには、char
をint
に広げることができます。
Dog
のインスタンスを取得し、それをIAnimal
に広げて関数に渡すことができます。
List<IAnimal>
の動物の種類が何らかの理由で工場や他の場所にあることがわかっている場合は、IAnimal
をDog
に短縮することができます。
javaでは、intをブール値に変換できません。これは、非常に多くのバグを引き起こしているCの特質です。 – Voo
暗黙の変換を使用して、異なるタイプの数値で数式を実行します。 now()
が長いよう秒でタイムスタンプを返す場合たとえば、:
long t = now()
long nextMinute = t + 60
あなたはt
に追加することができますので、あなたは長い間に60の暗黙の拡大変換(int)を行っています。このような変換を行うことができれば、数学の作成がはるかに容易になります。
コンバージョンの拡大と縮小の標準的な例の1つは、特定のファイルI/Oライブラリがどのように機能するかです。多くの場合、ファイル処理ライブラリには、ファイルから単一の文字を読み取る関数/メソッドがあります。読み込む文字がある場合、関数はその文字を返す必要があり、文字が残っていなければ、これを通知するために、センチネル値EOFを返す必要があります。
任意の文字がファイルに表示される可能性があるため、通常の関数/メソッドは、この署名を持っているでしょう:
ここint readCharacter();
を、関数は、文字が読み、保持しているされた場合char
値を保持int
を返します。それ以外はセンチネルとしてEOF
。 EOF
は、通常、char
で保持するには大きすぎる整数として選択されます。そうすれば、あなたはこれを行うことができます:
while (true) {
int ch = readCharacter();
if (ch == EOF) break;
char actualCharValue = (char) ch;
/* process actualCharValue here */
}
これは役に立ちます。
は
変換...これを取ります。
例えば、外科医 - >メディコ。この場合、キャスティングは必要ありません。なぜなら、外科医はデフォルトでメディコだからです。したがって、外科医がメディコができるすべてのものを実行できることは当然です。
一方、 変換 - 一般化 - >専門化すると、より専門的になっているときには、絞り込みとして知られています。
Medico - >外科医など。この場合、キャスティングを追加する必要があります。メディコは、外科医、医師、または看護師になることができるからです。あなたの看護師に手術を依頼すれば、それを考えてください。
恐ろしい、右???
あなたは考えがあるといいですね。
- 1. 拡大/縮小winform
- 2. Androidビットマップイメージの拡大/縮小
- 3. サイトコンテンツの拡大と縮小
- 4. フォトショップでの拡大縮小のホットキー
- 5. イメージビューアンドロイドでのギャラリービューの拡大と縮小
- 6. GTKで画像の拡大/縮小
- 7. Winformsアプリケーションでラベルテキストを拡大・縮小可能にするには
- 8. キャンバスでビットマップを回転、拡大縮小、および変換する
- 9. 動的(拡大/縮小)スレッドプールの作成
- 10. TabBarItemイメージの拡大/縮小方法
- 11. Javascriptで複数の画像を拡大/縮小/拡大/縮小する最適な方法は?
- 12. HTML5キャンバスとコンテンツのサイズ変更と拡大縮小
- 13. 拡大縮小されたSurfaceViewの補間方法を変更
- 14. 拡大縮小リスト無秩序リスト
- 15. Androidでビューを拡大縮小できますか?
- 16. Xcode 4.0でXibファイルビューを拡大/縮小できますか?
- 17. フォントを拡大縮小することはできますか?
- 18. アンドロイドで拡大縮小されたレイヤード画像を拡大する
- 19. Androidのキャンバスで画像を拡大/縮小する
- 20. ピンチズームで個々のオブジェクトを拡大縮小する方法
- 21. dijit.Tree:ハンドラの拡大/縮小、私のアプリでイベント
- 22. 角度のある素材グリッドで画像の拡大/縮小
- 23. 拡大縮小せずにURLからのビットマップ
- 24. ギャラリーで選択した画像の拡大/縮小
- 25. カメラで写真を撮るときの拡大/縮小オプション
- 26. NSViewまたは拡大鏡を使用して拡大/縮小する
- 27. ユーザーがウェブページを拡大/縮小するのを止める
- 28. ImageButtonをImageViewのように拡大縮小する方法
- 29. 特定のポイントに拡大縮小する
- 30. 2次元のRuby NArrayを拡大/縮小するには?
数百万の例がありますが、コードを書くときは毎日実行しているはずです。 –
私は学生で、数年前からプログラミングを勉強していましたが、これまでにこれまでに遭遇したことはありません。もし私がそれに遭遇したなら、この質問をすることには意味がないだろうが、批評に感謝する。 –