繁体   English   中英

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

[英]how to inject interface to class in java?

我有我的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属于服务layer和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");

所以我想如果断言从emailResponse失败执行方法onErrorDo()

你可以做到

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

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

要调用接口方法,只需使用方法的名称即可。

像这样:

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 ..所以:

mc.MyMethod();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM