Julia泛型构造函数:如何带参数类型T初始化空Archive结构体
Julia 泛型结构体构造函数优化方案
你当前的无参构造函数Archive()会返回Archive{Any}类型的实例,因为空数组[]默认是Vector{Any},这和你Java代码中限定T extends Solution的意图不符。可以通过以下两种方式修改构造函数,让它支持指定类型参数T:
1. 显式传入类型参数的构造函数
定义一个接受T类型作为参数的构造函数,确保T是Solution的子类型:
function Archive(::Type{T}) where T <: Solution return Archive(Vector{T}()) end
调用方式示例:
# 假设MySolution是Solution的子类型 archive = Archive(MySolution)
2. 支持类型参数的无参构造函数
利用Julia的类型参数语法,直接通过大括号指定T来创建实例:
Archive{T <: Solution}() = Archive(Vector{T}())
调用方式示例:
archive = Archive{MySolution}()
这种方式更贴近Java中new Archive<MySolution>()的写法。
另外,如果你希望无参构造默认使用Solution类型而非Any,可以修改原无参构造:
Archive() = Archive(Vector{Solution}())
补充说明
Julia的泛型系统和Java存在差异:
- Julia中结构体的类型参数通过大括号
{}指定,而非Java的尖括号<> - 空数组
[]默认类型为Vector{Any},必须显式创建Vector{T}才能约束元素类型
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

