前面文章说的都是一个EClass结构上的特性,也就是EAttribute和EReference。这篇文章主要介绍一个EClass的
行为上的特性(BehavioralFeature),跟MOF的Class图是一样的。
所谓行为特性就是指方法。即EOperation。
一个方法有参数,可以有返回值,EParameter就是参数,而EOperation继承于ETypedElement,也就是说一个EOperation
可以指定eType,这就是返回类型了,即可以是Eclass,也可以是EDataType。
一个Eclass通过eOperations可以取得所有的本类的方法,但不包括超类的方法。
而eAllOperations就可以取得本类和超类的所有的方法。
而一个EOperation通过eContainingClass取得这个方法属于的那个类。
一个EOperation通过eParameters取得所有的参数,而一个EParameter通过eOperation取得参数是那个方法的方法。
当然方法可以抛出异常,异常是通过eExceptions取得的。eException的类型是Eclassifier,也就是说也是一个EClass。
在EClass里对应的方法如下
EList getEOperations()
EList getEAllOperations()
和EAttribute和EReference的实现稍微有一点区别,以上两个方法这次分开实现的。
- public EList<EOperation> getEAllOperations() {
- if (eAllOperations == null) {
- BasicEList<EOperation> result =
- new UniqueEList<EOperation>() {
- private static final long serialVersionUID = 1L;
- @Override
- protected Object [] newData(int capacity) {
- return new EOperation [capacity];
- }
- @Override
- protected boolean useEquals() {
- return false;
- }
- };
- Set<EClass> computationInProgress = COMPUTATION_IN_PROGRESS.get();
- if (computationInProgress.add(this)) {
- for (EClass eSuperType : getESuperTypes()) {
- result.addAll(eSuperType.getEAllOperations());
- }
- computationInProgress.remove(this);
- }
- result.addAll(getEOperations());
- result.shrink();
- eAllOperations =
- new EcoreEList.UnmodifiableEList.FastCompare<EOperation>
- (this, EcorePackage.eINSTANCE.getEClass_EAllOperations(), result.size(), result.data());
- getESuperAdapter().setAllOperationsCollectionModified(false);
- }
- return eAllOperations;
- }
而在EOperation里的方法如下
EClass getEContainingClass()
EList getEParameters()
EList getEExceptions()