I'm new to programming in Julia (I'm coming from Java) and some Julia concepts are still difficult to understand to me. What I intend is to replicate this Java code:
public class Archive<T extends Solution> {
public List<T> solutions;
public Archive() {
solutions = new ArrayList<>() ;
}
}
Then, I have defined the following Julia struct:
mutable struct Archive{T <: Solution}
solutions::Vector{T}
end
and I would like to define a constructor to inialize empty archives. In the case of an external constructor, I think that the code would look like this:
function Archive()
return Archive([])
end
Would it be possible to modify the constructor somehow to include the parametric type T?.
This is most likely the constructor you want:
Archive(T::Type{<:Solution}=Solution) =Archive(T[])
Then you can write Archive()
or Archive(SomeType)
if SomeType
is a subtype of Solution
.
Note that your definition:
function Archive()
return Archive([])
end
Is incorrect unless Solution
is Any
(and most likely it is not). You will get an error as []
is Vector{Any}
and you require Archive
to store subtypes of Vector{<:Solution}
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With