[英]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.