How can I determine if one class is superior or inferior to another?
Show older comments
Matlab uses class precedence to determine which methods are called. Given two class names, is it possible to determine the class precedence relationship between the two? The new metaclass structure contains some of this information for classdef classes, but lacks information about older-style classes and fundamental types.
I'd love to find (or be able to write) a generic utility that simply asks is 'class_a' superior to 'class_b'? Is this possible?
Accepted Answer
More Answers (1)
You could use property SuperclassList from the output of METACLASS recursively ..
Here is an example:
function tf = isSubclass( classObjMeta, superclassName )
tf = true ;
if ischar( classObjMeta ), classObjMeta = feval( classObjMeta ) ; end
if ~isa( classObjMeta, 'meta.class' )
classObjMeta = metaclass( classObjMeta ) ;
end
if strcmp( classObjMeta.Name, superclassName ), return ; end
for scId = 1 : length( classObjMeta.SuperclassList )
if isSubclass( classObjMeta.SuperclassList(scId), superclassName )
return
end
end
tf = false ;
end
Note that I just took 5 minutes to write that, so you'll want to stabilize or fine tune it. In particular, I leave it to you to modify it if you don't want the output to be true when you test a class with itself, .. or to ask users to pass an object as 1st arg if class doesn't support no-argument constructor (that should be tested in try/catch statement I guess).
To test it, define e.g.
classdef ClassA < handle
end
classdef ClassB < ClassA
end
and you'll have
>> isSubclass( 'ClassB', 'handle' )
ans =
1
>> isSubclass( 'ClassA', 'handle' )
ans =
1
>> isSubclass( 'ClassB', 'ClassA' )
ans =
1
>> isSubclass( 'ClassA', 'ClassB' )
ans =
0
2 Comments
Matt Bauman
on 8 Oct 2013
Cedric
on 8 Oct 2013
Well, I should have taken 6 minutes instead of 5, and read completely the question!
Categories
Find more on Language Support in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!