如何在java中为类注入接口?

时间:2014-11-28 14:22:49

标签: java interface inject

我有我的DTO课程:

public class EmailResponse {

    // Make public to avoid getters and setters
    public Email email;
    public RequestData reqData;    

    public EmailResponse() {
        super();
    }

}

我想实现这个界面:

public interface IAssertionErrorDo {
    public void onErrorDo();
}

但我想在执行期间执行此操作,我不想触摸“EmailResponse”,因为由于它们不属于同一层而无法使其实现该接口,我的意思是,EmailResponse会属于服务层,IAssertionError属于测试层。我正在使用TestNG。

你知道我怎么做吗?此致

编辑: 我的实现是这样的:

EmailResponse emailResponse = emailService.getUserEmail(userId);

我之所以要这么做“注射”是因为我有

public class LoggingAssert
    extends Assertion {

    private static final Logger LOGGER = LoggerFactory.getLogger(LoggingAssert.class);
    private IAssertionErrorDo dataE;
    @Override
    public void onAssertFailure(IAssert a, AssertionError ex) {
        LOGGER.info("[ERROR] " + a.getMessage());
        if (this.dataE != null) {
            this.dataE.onErrorDo();
        }
    }

    public LoggingAssert setOnErrorDo(IAssertionErrorDo object) {
        this.object = object;
        return this;
    }
}

loggingAssert.setOnErrorDo(emailResponse).assertNotNull(emailResponse.getEmail().getId(),
            "Checking created email doesn't exists");

所以我想如果assert在emailResponse

中失败执行方法onErrorDo()

2 个答案:

答案 0 :(得分:2)

你可以做到

public class MyEmailResponse extends EmailResponse implements IAssertionErrorDo {
...
}

答案 1 :(得分:1)

在接口中实现调用,如果需要,可以通过添加逗号来分隔它们来调用多个接口。

调用接口方法只需使用方法的名称。

像这样:

public class MyEmailResponse implements IAssertionErrorDo 
{
  public void onErrorDo() {//define it's behavior}
} 

如果您扩展您使用的课​​程: super.MyMethod() 在扩展类中调用一个方法,但是如果你已经有一个扩展类并且想要一个来自另一个类的方法,你必须首先为该类创建一个对象,然后调用它,因此:

MyClass mc = new MyClass();

如果它在不同的包中,那么

myPackage.MyClass mc = new myPackage.MyClass();  然后使用您创建的对象从该类调用您的方法,在本例中为mc .. so:

mc.MyMethod();

如果您希望它返回一个变量,那么您需要在该方法中添加一个返回语句,并使用您希望它返回的变量。

接口通常用于全局变化的环境(动态),例如,如果您开发了一个程序,并且需要一个驱动程序来连接数据库,那么您将创建一个接口并将其发送给数据库开发人员,每个人都将填写该界面中的代码并将其发回...这可以保证一致性。 当你实现一个接口时,你必须定义它内部的每个方法(即使你把它留空)你也不能改变界面的方法名称,也不能添加......它也用在其他领域,我不会# 39;认为你需要在你的情况下使用它。