Calling a class's static method from its metadata
显示 更早的评论
I am looking to create a number of classes which all subclass a superclass, AnalysisFunction in this case, which defines one abstract static method, results = apply(ClassWithData).
I want a controller class to be able to call apply(classWithData) on all classes which subclass AnalysisFunction. My initial plan is to create a namespace to house all the subclasses I want to be called then in the controller get the namespace's metadata object, loop through the present classes, check if each subclasses AnalysisFunction and if it does, call apply(classWithData) on the class.
To do this, I need to be able to evaluate a method against a class from its metadata. A simple, though in my opinion ugly, way of doing this is to use eval with the class's name (from the metadata object) and .apply(classWithData) concatenated as a string.
Is there a way to avoid the use of eval, or indeed a better way entirely from what I am proposing to achieve the calling of such an abstract static function on all subclasses? Thanks in advance!
3 个评论
Matt J
2020-3-12
I want a controller class to be able to call apply(classWithData) on all classes which subclass AnalysisFunction.
Why is it a static method if it takes an object of that same subclass as an argument. Shouldn't it be an overloaded non-Static method?
Thomas Atkinson
2020-3-12
Thomas Atkinson
2020-3-12
回答(1 个)
or indeed a better way entirely from what I am proposing to achieve the calling of such an abstract static function on all subclasses?
If you have an object of the sub-class present, you can use it to call the Static method of the sub-class.
if isa(obj,'AnalysisFunction')
obj.apply(classWithData);
end
1 个评论
Is there a way to avoid the use of eval
Aside from the above, you could use feval instead.
feval(str2func(class(obj)+".apply"), classWithData)
类别
在 帮助中心 和 File Exchange 中查找有关 Structured Data and XML Documents 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
