将状态代码放入Java接口
我需要一种方法来获取实现接口的类的状态。将静态值放在实际接口中是否被认为是不好的做法 将有4个courier类实现该接口,它们都具有相同的返回状态将状态代码放入Java接口,java,interface,Java,Interface,我需要一种方法来获取实现接口的类的状态。将静态值放在实际接口中是否被认为是不好的做法 将有4个courier类实现该接口,它们都具有相同的返回状态 公共接口CurrierIF{ 公共静态最终整数等待=0; 公共静态最终整型工作=1; 无效提取(装运); 列出getServices(); int getStatus(); } Enum Java具有令人印象深刻的枚举功能。与其他语言相比,integer-with-a-label更强大、更实用。看 当加载此CurrierStatus类时,会自动实例化
公共接口CurrierIF{
公共静态最终整数等待=0;
公共静态最终整型工作=1;
无效提取(装运);
列出getServices();
int getStatus();
}
Enum
Java具有令人印象深刻的枚举功能。与其他语言相比,integer-with-a-label更强大、更实用。看
当加载此CurrierStatus
类时,会自动实例化一对对象,每个对象都被分配给那些名称中的一个等待和工作
接口
当然,Java中的接口不能定义成员变量。或者,我们可以定义一个getter
在Currier
接口上定义一个getter方法getStatus
,以返回这两个预定义对象中的一个
package work.basil.example;
public interface Currier
{
CurrierStatus getStatus();
// blah, blah, other methods defined.
}
在具体的类中,定义一个成员变量来保存CurrierStatus
enum对象。通过构造函数注入设置状态变量,或者添加setter方法,等等。实现所需的getter方法以返回当前持有的状态枚举对象
package work.basil.example;
public class CurrierDomestic implements Currier
{
private CurrierStatus status;
// Constructor
public CurrierDomestic ( CurrierStatus status )
{
this.status = status;
}
@Override
public CurrierStatus getStatus ()
{
return this.status;
}
}
使用它
Currier currier = new CurrierDomestic( CurrierStatus.WORKING ) ;
System.out.println( "The currier status is: " + currier.getStatus() ;
抽象类
我写了上面的接口材料,因为你在问题中提出了这样的要求
在实际工作中,如果我确实知道我希望Currier
的每个排列、每个具体类都持有CurrierStatus
对象引用,我会将Currier
定义为一个抽象类,而不是一个接口
package work.basil.example;
public abstract class Currier
{
private CurrierStatus status;
// Constructor
public Currier ( CurrierStatus status )
{
this.status = status;
}
public CurrierStatus getStatus ()
{
return this.status;
}
// blah, blah, other methods defined.
}
然后我们的具体类将扩展抽象类,而不是实现接口
public class CurrierDomestic extends Currier { … }
……还有
public class CurrierForeign extends Currier { … }
……等等
顺便说一下,请尝试命名接口和抽象类,而不要使用前缀/后缀来表示接口。命名很难,但值得。对于一组设计良好的类,什么是接口,什么是具体的不需要如此明显。(一般来说)为什么不使用enum
?如果您还需要一些外部交互的整数值,您可以向enum添加一个提供相应整数值的方法。Josh Bloch将其称为“常量接口反模式”,其上的int
不是状态类型,而是可计算类型。其他评论者认为这是enum
的情况,这是正确的。
public class CurrierForeign extends Currier { … }