dpq755012465 2016-09-01 18:40
浏览 37
已采纳

创建具体类型的切片并将其转换为相应的界面

Having some issues creating a slice of interfaces and initiating it to its concrete type, any help would be greatly appretiated

Interface

type MatrixElement interface {
    GetValue() Element
    GetCoordinate() Coordinate
}

Concrete Implementation

type LocatableElement struct {
    value datastructures.Element
    coordinate datastructures.Coordinate
}

func (ele LocatableElement)GetValue() datastructures.Element {
    return ele.value
}

func (ele LocatableElement)GetCoordinate() datastructures.Coordinate {
    return ele.coordinate
}

func CreateLocatableElement(value datastructures.Element, coordinate datastructures.Coordinate) LocatableElement {
    return LocatableElement{
        value: value,
        coordinate: coordinate,
    }
}

Defining the Type as a slice

type HorizontalMatrix [][]datastructures.MatrixElement

Creating an instance of the new HorizonatlMatrix

func CreateHorizontalMatrix(rows int, columns int) HorizontalMatrix {
    horzMatrix := make([][]matrix.LocatableElement, rows)
    for i := 0; i < rows; i++ {
        horzMatrix[i] = make([]matrix.LocatableElement, columns)
    }
    return horzMatrix;
}

cannot use horzMatrix (type [][]matrix.LocatableElement) as type HorizontalMatrix in return argument

  • 写回答

1条回答 默认 最新

  • donglengli0644 2016-09-01 19:35
    关注

    You can't neither cast []ConcreteTypes([]Interfaces) nor assert []Interfaces.([]ConcreteTypes) nevertheless ConcreteTypes implements Interfaces. You should either define container

    type Matrix interface{
        GetElem(abs, ord int) MatrixElement 
    }
    

    and satisfy it for HorizontalMatrix or make matrix as []interface

    horzMatrix := make([][]matrix.MatrixElement, rows)
    horzMatrix[i] = make([]matrix.MatrixElement, columns)
    

    and than populate it with concrete type LocatableElement

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?