2015-11-14 84 views
1

什么是开关类(来源于org.eclipse.emf.ecore.util.Switch<T>)用于?什么是Switch类用于?

javadoc解释它作为

一个抽象基类为所有开关类。

这没有帮助,因为我从来没有听说过“开关班”之前。

+1

这是一个eclipse框架类,用于抽象工厂根据模型对象的类型创建对象。没有正确使用Eclipse RCP,我不觉得我可以回答整个问题。但有一些信息[这里](https://books.google.co.uk/books?id=ff-9ZYhvPwwC&pg=PA207&lpg=PA207&dq=eclipse+%22switch+classes%22&source=bl&ots=yAWqE2sSsF&sig=g0Z6CGmXW1AHu6eb39e2zW36CSs&hl=zh-CN&sa=X&ved= 0CD4Q6AEwBGoVChMIv7HMjY6VyQIVhb8UCh2Yhgxx#v = onepage&q = eclipse%20%22switch%20classes%22&f = false) – AndyN

+0

如果您总结说,要删除对该外部网站的依赖关系,那么我会接受它作为一个问题。 –

回答

2

switch类是一个类,它允许您根据模型对象(在本例中为EMF模型对象)选择和实例化类型的具体实例。我见过的例子表明它对于为EMF模型实例化类型特定的适配器很有用。

您可以通过覆盖doSwitch方法来使用它。例如,假设我有一个模型对象,我要实例对应于type值在我的模型适配器对象:

public class ExampleSwitch extends Switch<Adapter> { 

    public Adapter doSwitch(EObject eobject) { 
     if (eobject instanceof MyModel) { 
      switch (eobject.getType()) { 
       case TYPEA: 
        Adapter result = createTypeAAdapter(eobject); 
        if (result == null) { 
         return createDefaultAdapter(eobject); 
        } 
        return result; 
       case TYPEB: 
        ... 
       default: 
      } 
     } 
    } 
} 

日食org.eclipse.emf.common.notify.AdapterFactory然后将使用此来返回一个适配器。

public class MyAdapterFactory implements AdapterFactory { 
    public boolean isFactoryForType(Object o) { 
     return (o instanceof MyModel); 
    } 
    public Adapter adapt(Notifier notifier, Object type) { 
     return mySwitch.doSwitch((EObject)notifier); 
    } 
} 

我从here拉此信息。我没有证实这一点,但显然EMF​​发生器可以为你自动生成AdapterFactories和Switch类。

-2

Java中的所有东西都是类。 (除原语)。所以当你使用switch时,在幕后你可以调用一个具有switch所有逻辑的类。 Switch<T>可能是其他交换机类在您使用它们时继承和实现方法的类。例如,您可以使用switch(int),也可以使用switch(String),这两种功能都不同,必须在某处进行定义。