問題タブ [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.
c# - この具体的なジェネリック型を、同じ契約を満たす具体的な型に置き換えることができないのはなぜですか?
class Node
実装でジェネリック型をIEdge<Node>
具体的な実装に置き換えられないのはなぜですかclass Edge:IEdge<Node>
。
TEdgeN
void AddIncoming(TEdgeN edge)
は、このシナリオでout TEdgeN
は問題が解決しないことを示すために、入力パラメーターとして使用されます。そうでなければ、これはtypeout TEdgeN
を許可する を使用して解決できます。covariant
TEdgeN
上記のIEdge<NodeGood>
for typeTEdgeN
は有効ですが、なぜEdgeBad
が無効な type なのか疑問に思っていますTEdgeN
。
私は十分に認識しており、何かを監視していますが、すべきではありません:
TEdgeN
inの有効な型であること
私は確信していますが、解決中INode
および IEdge
解決時の循環的な一般的な制約のために、コンパイラが不平を言うと仮定しますNodeBad
:
- が の有効なタイプであることを確認する
NodeBad
には、 が の有効なタイプでTNodeN
あることを知る必要がありEdgeBad
ます。TEdgeN
EdgeBad
が の有効な型であることを確認するには、 が の有効な型であることTEdgeN
を知る必要があります。NodeBad
TNodeE
NodeBad
が有効な型であることを確認するには、次の制約で型として使用されるTNodeE
ため、有効な型である必要があります。TNodeN
TNodeE
TNodeN
interface IEdge
arrays - 配列: キャストせずに Int 値を取得および設定する
Number
Matrix クラスを作成していて、s を 2 次元配列に格納できるようにしたいと考えています。
Array<Number>
とArray<Int>
は不変であるため、これは機能しません。を使用して機能させることはできますArray<Array<out Number>>
が、マトリックスは不変になり、それは望ましくありません...
キャスト{0 as Int}
によりコンパイラ エラーは解消されますが、これは良い考えとは思えません。また、足し算のようなこともしたいのですが、 Number
sを追加できないことに気付きました。
では、どうすればこの問題を解決できますか? Number
そして、正確に 2 つの sを追加できないのはなぜですか?