問題タブ [invariance]

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 投票する
0 に答える
69 参照

c# - この具体的なジェネリック型を、同じ契約を満たす具体的な型に置き換えることができないのはなぜですか?

class Node実装でジェネリック型をIEdge<Node>具体的な実装に置き換えられないのはなぜですかclass Edge:IEdge<Node>

TEdgeNvoid AddIncoming(TEdgeN edge)は、このシナリオでout TEdgeNは問題が解決しないことを示すために、入力パラメーターとして使用されます。そうでなければ、これはtypeout TEdgeNを許可する を使用して解決できます。covariantTEdgeN

上記のIEdge<NodeGood>for typeTEdgeNは有効ですが、なぜEdgeBadが無効な type なのか疑問に思っていますTEdgeN

私は十分に認識しており、何かを監視していますが、すべきではありません:

TEdgeNinの有効な型であること

私は確信していますが、解決中INodeおよび IEdge解決時の循環的な一般的な制約のために、コンパイラが不平を言うと仮定しますNodeBad:

  • が の有効なタイプであることを確認するNodeBadには、 が の有効なタイプでTNodeNあることを知る必要がありEdgeBadます。TEdgeN
  • EdgeBadが の有効な型であることを確認するには、 が の有効な型であることTEdgeNを知る必要があります。NodeBadTNodeE
  • NodeBadが有効な型であることを確認するには、次の制約で型として使用されるTNodeEため、有効な型である必要があります。TNodeNTNodeETNodeNinterface IEdge
0 投票する
1 に答える
58 参照

arrays - 配列: キャストせずに Int 値を取得および設定する

NumberMatrix クラスを作成していて、s を 2 次元配列に格納できるようにしたいと考えています。

Array<Number>Array<Int>は不変であるため、これは機能しません。を使用して機能させることはできますArray<Array<out Number>>が、マトリックスは不変になり、それは望ましくありません...

キャスト{0 as Int}によりコンパイラ エラーは解消されますが、これは良い考えとは思えません。また、足し算のようなこともしたいのですが、 Numbersを追加できないことに気付きました。

では、どうすればこの問題を解決できますか? Numberそして、正確に 2 つの sを追加できないのはなぜですか?