How to get the name of the calling class in a static method?
조회 수: 23 (최근 30일)
이전 댓글 표시
Hi,
is there a way so that a static method can get the name of the class that is calling it?
In a non-static method, one always has the option of running class(obj) obj being the object on whihc the method is being applied. But how to do it for a static method?
댓글 수: 0
채택된 답변
Guillaume
2014년 10월 6일
mfilename('class')
However, since inheritance doesn't really have any effect on static methods, you could just hardcode it in the method.
댓글 수: 5
Guillaume
2014년 10월 7일
Well, the simplest thing to do what you want is to take the showinfo method out of the class definition and implement it as a free function, on its own:
function showinfo(classname)
if ismember('baseclassname', superclasses(classname))
info = eval(sprintf('%s.extractinfo')); %dispatch to static method
%common code for showinfo
else
error('showinfo only applies to classes derived from baseclassname');
end
end
The calling syntax does not differ much anyway:
%using hypotetical derived static method that would know where it's called from:
derivedclassname.showinfo;
%using free function:
showinfo('derivedclassname');
추가 답변 (1개)
Captain Karnage
2023년 5월 16일
Another option is you can pass an empty version of the subclass enumeration to the superclass method. This would mean you have to create a version of the function in each subclass, which I know is a bit of a pain, but it ends up being a very simple, one line function in the subclass. Below is a very simple example, but this works really well if the static function you want to use in the superclass it is in rather complicated as you can use a simple pass through to call it from the subclass.
classdef mySuperClass
methods(static)
function name = getName ( subObj )
arguments
subObj mySuperClass
end
name = class(subObj);
%Note: you can call any other static functions or properties using myEnum.staticname
end
end
end
classdef mySubClassA
methods(static)
function name = getName()
name = getName@mySuperClass( mySubClassA.empty );
end
end
end
classdef mySubClassB
methods(static)
function name = getName()
name = getName@mySuperClass( mySubClassB.empty );
end
end
end
now mySubClassA.getName will return "mySubClassA" and likewise for mySubClassB
If you do similar with other static functions - by passing an empty class in to subObj, you can call the getName function using subObj.getName.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Subclass Definition에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!