diese Klasse mit zwei Funktionen Betrachten, eines mit Int
Argument, das andere mit einem generischen:Wie behandelt man eine Mehrdeutigkeitsauflösung von Funktionen mit Generics?
class C<K, V> {
// ...
operator fun f(index: Int): Pair<K, V> = ...
operator fun f(key: K): V = ...
}
Wenn es als C<Int, SomeType>
parametriert, K
ist Int
, und beide Funktionen die Anrufe entsprechen, einem Fehler führt in :
val m = C<Int, SomeType>()
m.f(1)
Overload resolution ambiguity. All these functions match:
public final fun f(index: Int): SomeType
defined inC
public final fun f(key: Int): Pair<Int, SomeType>?
defined inC
Wie rufe ich je nachdem, was f
ich in diesem Fall wollen?
Das stimmt, aber das erfordert im Voraus einige Überlegungen, um die Klasse 'C' zu entwerfen, die mögliche Signaturkonflikte mit substituierten Generika verhindert. Und wenn Sie einer solchen Klasse gegenüberstehen und keine Möglichkeit haben, ihre Funktionen umzubenennen, müssen Sie auf generische Tricks aus der Antwort von @ hotkey zurückgreifen. – Ilya