我看到了下面的代码。它是一个接口,其中有一个属性分配。我知道接口只能用来声明方法。这样做的目的是什么?
interface Literals {
/**
* The meta object literal for the '{@link bowling.impl.PlayerImpl <em>Player</em>}' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see bowling.impl.PlayerImpl
* @see bowling.impl.BowlingPackageImpl#getPlayer()
* @generated
*/
EClass PLAYER = eINSTANCE.getPlayer();
/**
* The meta object literal for the '<em><b>Name</b></em>' attribute feature.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
EAttribute PLAYER__NAME = eINSTANCE.getPlayer_Name();
/**
* The meta object literal for the '<em><b>Date Of Birth</b></em>' attribute feature.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
EAttribute PLAYER__DATE_OF_BIRTH = eINSTANCE.getPlayer_DateOfBirth();
}
短答:常量。
引用Java语言规范,第9节"接口",第9.3节"字段(常量)声明":
接口体中的每个字段声明都隐式地为
public
,static
和final
。允许为这些字段冗余地指定任何或所有这些修饰符。
指定隐式修饰符是相同的,但可能需要澄清:
interface Literals {
public static final EClass PLAYER = eINSTANCE.getPlayer();
public static final EAttribute PLAYER__NAME = eINSTANCE.getPlayer_Name();
public static final EAttribute PLAYER__DATE_OF_BIRTH = eINSTANCE.getPlayer_DateOfBirth();
}
我称之为反模式。接口是用来使用方法定义契约的。在提供的接口中,它似乎用于全局变量的目的。
从逻辑上讲,接口具有属性/属性是没有意义的,类应该用于具有属性和操作的实体。这可以使用类和静态导入来实现相同的目的。