我想为静态方法(即没有F-Bounded多态)提供下面描述的功能,但到目前为止我还没有。我非常感谢您的意见。
假设我们有以下类层次结构:
sealed trait A
case class B(value: Int) extends A
case class C(value: Int) extends A
如果我尝试执行以下操作,编译器会抱怨:
def doSomething[T <: A](arg1: T, arg2: Any, ...): T = {
arg1 match {
case b: B => B(5)
case c: C => C(5)
}
}
有没有办法实现这个功能?
谢谢!
答案 0 :(得分:0)
不,使用此类层次结构无法表达它。
def doSomething[T <: A](arg1: T, arg2: Any, ...): T = arg1
中{<1}}的一般强制转换.asInstanceOf[T]
。通常&#34;一般不正确&#34;我的意思是在最后添加import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs/Subscription'
import { Events } from '../shared/messages/events';
import { MessageService } from '../shared/messages/message.service';
export class Component implements OnInit, OnDestroy {
public icon: string;
private subscription: Subscription;
constructor() { this.btnClickSubscribe();}
private btnClickSubscribe(): void {
this.subscription = this.messageService
.subscribe(Events.btnClick, (payload) => {
this.icon = 'fa-trash-o';
console.log(this.icon) //logs the correct value, 'fa-trash-o'
//but it's only available inside this context. I need it in the
//class context
});
}
会使它编译,但是会有一些程序不应该进行类型检查。
发明了F-Bounded多态性来解决这个问题。任何其他解决方案都将等同或更糟。