Can I find out if a class is an abstract class before trying to instantiate it?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Sam
el 17 de Jul. de 2012
Respondida: Kyle
el 3 de Nov. de 2023
Can i somehow say:
if isAbstract(className)
% do something
else
% do something else
end
0 comentarios
Respuesta aceptada
per isakson
el 17 de Jul. de 2012
Editada: per isakson
el 17 de Jul. de 2012
A class is abstract if any of its properties or methods is abstract.
It's possible to write a function, is_abstract. Start:
mco = ?my_class
mco.PropertyList
mco.MethodList
any([mco.MethodList.Abstract])
.
or better
mcls = meta.class.fromName('ClassName')
3 comentarios
per isakson
el 17 de Jul. de 2012
Wouldn't calling an abstract method in a class definition be an error?
Daniel Shub
el 18 de Jul. de 2012
@Walter, but that "hidden" abstract method would be abstract and eventually caught. The metaclass object has access to all methods and properties (even private ones), so I do not think it needs to be recursive.
Más respuestas (4)
Image Analyst
el 17 de Jul. de 2012
I don't think so. But you should know just by looking at the code, or just try it and see. Why would you ever not know what you're calling and have to use the test you you described? Worst case, you could wrap your method call in a try/catch to do what you want, but I would recommend knowing beforehand than doing that.
0 comentarios
Daniel Shub
el 18 de Jul. de 2012
It might be quicker to try and create the object in a try-catch and deal with errors when they happen.
0 comentarios
Ver también
Categorías
Más información sobre Class Introspection and Metadata en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!