問題タブ [subtyping]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
317 参照

java - このJavaタイピング階層は正しいですか?

タイプ、、、、、、、およびを考えると、私List<?>はそれらの階層を理解しようとしています。List<Object>List<? super Number>List<Number>List<Integer>List<? extends Number>

確かにのサブタイプですが、それはのList<Integer>サブタイプではないことを私は知っているので、代わりにのサブタイプだと思いました。List<Number>IntegerNumberList<? extends Number>

しかし、List<? extends Number>直感的にはのサブタイプのように見えますList<Number>。これは、私の考えが示すように、結局のところList<Integer>子孫になります。List<Number>

ここに画像の説明を入力してください

それで、タイプが別のタイプから派生しているが、直接ではない場合、それはまだその祖先のサブタイプですか(または私は図で間違っています)?この演習では、?対について少し混乱しました...実際には、私が持っていて混乱しObjectているように見えます。最大の質問の1つは、「「すべて」は...またはすべては?」ということだと思います。または両方...またはどちらでもない?List<Object>List<? super Number>Object?

0 投票する
2 に答える
937 参照

java - 「?extendsE」と「TextendsE」の違いは何ですか?

私はJavaを初めて使用し、Java Generics and Collectionsの本から以下の奇妙な構文を理解しようとしています。(私はC ++テンプレートを幅広く使用したため、ジェネリックプログラミングの基本と考えられる落とし穴を理解していると主張できます)。

上記を次のように記述できないのはなぜですか。

違いはなんですか?それは単なる言語制限ですか、それとも内部で何か違いがありますか?

0 投票する
2 に答える
305 参照

c++ - 例外処理と強制

出力:

サブタイピングでは例外処理がうまくいくのに、強制ではうまくいかないのはなぜですか?

0 投票する
2 に答える
2405 参照

ocaml - OCaml がレコードのサブタイプをサポートしないのはなぜですか?

「型とプログラミング言語」を読んで、クロージャーとレコードのサブタイピングを使用したオブジェクトの実装に感銘を受けました (第 18 章)。OCaml がレコードのサブタイピングをサポートしていない特別な理由はありますか (オブジェクトがサポートしていることは知っています)? 実際、これをサポートする言語は見つかりません。

0 投票する
4 に答える
535 参照

c# - C# のジェネリック インターフェイス間のサブタイプ

いくつかのデータを含み、最小状態の別のインスタンスを生成できる「最小状態」タイプがあります。

また、より多くのデータを含み、通常状態のインスタンスを生成できる「通常状態」もあります。

私が知る限り、IState は IMinimalState のサブタイプである必要があります。(IMinimalState を必要とするものはすべて、IState を取得したときに同じように満足するはずです) ただし、コンパイラにそれを受け入れさせることはできません。

例:

では、ジェネリック インターフェイスを試してみましょう。

コンパイラ エラーはまだありません。しかしStateはまだ のサブタイプでMinimalStateIState<State>なく、 のサブタイプでもありませんIMinimalState<MinimalState>。他の多くの組み合わせを試しましたが、成功しませんでした。

IStateのサブタイプを作成する方法はありIMinimalStateますか? そうでない場合は、

  • .Net 型システムが十分に強力ではないためですか?

  • IStateまたは、それが本当にのサブタイプであると考えるのは間違っていますIMinimalStateか? IMinimalState(必要なものがを受け取った場合にプログラムがクラッシュするシナリオはありIStateますか?)

0 投票する
2 に答える
2108 参照

ocaml - なぜOCamlはポリモーフィックバリアントにサブタイピングを使用するのですか?

行ポリモーフィズムと、それを拡張可能なレコードとポリモーフィック バリアントに使用する方法について読みました。

ただし、Ocaml は多相バリアントのサブタイピングを使用します。なんで?行ポリモーフィズムよりも強力ですか?

0 投票する
1 に答える
272 参照

java - ジェネリック定義内の生の型

次の一般的な定義がコンパイラの警告を生成しないのはなぜでしょうか。

上記の定義がどのように異なるか

ジェネリックについて読むときはいつでも、生の型をどのように避けるべきかについて読んでいます。その結果、ジェネリック型を扱うときはいつでも、コンパイラの警告が表示されます。ただし、最初の定義内の生の型は、そのような警告を作成しません。

次に、未加工の型とジェネリック型の間の正確なサブタイプ定義はどのようになっているのだろうかと思います。この要約によると、生の型は一種の型チェックの「オプトアウト」であるため、生の型が関係するときは常に型チェックが単に非アクティブになります。この仮定は正しいですか?そして、これは上記の「生の」一般的な定義にどのように影響しますか?

ご協力ありがとうございました!

更新:あなたの言っていることは理解しています。しかし、これは私が混乱しているものではありません。このシナリオを見てください:

一般的な制約のため、 to からの最初の呼び出しは許可されませcallWildcard1ん。callBound1ただし、2 番目は許可されます。「内部の生の型」なしで最初の呼び出しを実行するにはどうすればよいですか? コンパイラが最初のものを禁止する理由がわかりません。パラメータ有効なワイルドカード パラメータが意味するものはあり? extends MyClass<?>ませんか?

更新 2 :試行錯誤の結果、次のように定義することで問題を解決できることがわかりました。

理由はよくわかりませんが。しかし、この例を見ると、さらに混乱があります: (これは、私が実際にやろうとしていることの非常に単純なバージョンです。)

なぜgenericCall1禁止されてgenericCall2いないのですか?繰り返しますが、私は真の理解ではなく、学術的な推測によって解決策を見つけました。ときどき、Java とそのジェネリックを扱っていると、泣きたくなることがあります...

0 投票する
0 に答える
71 参照

c# - ポインター型がオブジェクトのサブタイプではないのはなぜですか?

object言語設計者がポインター型を(参照型や値型とは異なり)サブタイプにしないことを選択したのはなぜですか? またはカスタムクラスを使用IntPtrせずにポインターをボックス化する方法はありますか?UIntPtr

0 投票する
1 に答える
193 参照

scala - 型メンバーとサブタイピングによる型キャストを避ける

パス依存型とパターン マッチングに問題があります。

scalac が と識別されないため、これは失敗foobます。その結果、次の 2 つのキャストでのみ機能します。

確かに、キャストを回避するためのクリーンな方法が必要ですか?

0 投票する
1 に答える
191 参照

java - 生の型とサブタイピング

次のコードを検討してください。

「生の型とは何か、それを使用すべきではない理由は?」のトピックを読みました。したがって、パラメータ化された型がある場合、生の型の定義により、コンパイル時に生の型へのMyClass<T>参照を定義できます。MyClass mさらにMyClass、指定されたパラメータ化された型に対応する生の型は、すべての特定の型の型消去前のコンパイル時MyClass<T>のスーパークラスです。この理由は正しいですか?MyClass<E> E