一个类是否有可能通过使用接口引用从另一类访问该方法?
假设我有一个loginUIController.java
类,我想从该类访问mainController.java
另一个类的方法。但是我不会直接访问该方法。为了从mainController.java
访问方法,我将使用mainController.java
的接口InferfaceMainController.java
。
以下类别是:-
这里是loginUIController.java
public class LoginUIController
{
InterfaceMainController mainController = null;
private void handleButtonAction(ActionEvent event) throws IOException
{
String userid = txt_username.getText();
String password = txt_password.getText();
mainController.checkLogin(userid, password);
}
}
InterfaceMainController:-
public interface InterfaceMainController {
void checkLogin(String userid, String password);
void addContact(String name, String phone, String address, String email);
}
mainController:-
public class MainController implements InterfaceMainController{
@Override
public void checkLogin(String userid, String password){
Users u = new Users();
u.setUserid(userid);
u.setPassword(password);
DBLayer db1 = new DBLayer();
try
{
if(db1.userExists(u))
{
System.out.println("login Success.");
}
else
{
System.out.println("login Failed.");
}
} catch (Exception ex) {
e.printStackTrace();
}
}
}
现在,如何通过创建checkLogin(String userid, String password);
的接口对象从mainController.java
访问loginUIController.java
的{{1}}中的InterfaceMainController.java
?
答案 0 :(得分:2)
从allSelected
的角度来看,没有LoginUIController
这样的东西。 MainController
仅知道有关LoginUIController
的信息。本质上就是您在其中定义的:
InterfaceMainController
要使用InterfaceMainController mainController = null;
的实例,您首先需要实现接口,在您的情况下为InterfaceMainController
。然后,创建实现的实例:
MainController
最后,您需要根据需要InterfaceMainController mainController = new MainController();
将实例提供给任何需要的实例。一种常见的方法是创建一个类似的构造函数:
LoginUIController
上面是引用的依赖注入 Elliot的示例。
答案 1 :(得分:0)
您的操作方式并没有真正的区别。确实是您的把手。
InterfaceMainController foo = new MainController();
foo.checkLogin("me", "my password");
您可以将foo传递给需要InterfaceMainController的任何方法。但是代码看起来还是一样的。只是变量类型会改变。
答案 2 :(得分:0)
在代码片段中,您似乎缺少一个实现接口InterfaceMainController
的对象(在您的示例中,这是MainController
的实例)。我可以想到两种方法来解决此问题:
到目前为止,选项#1还可以,但是采用这种方法,您将负责对象生命周期和所有权。选项#2不是Java语言功能,而是Frameworks提供的功能,例如Spring。
答案 3 :(得分:0)
是的,可以将MainController
obj传递给InterfaceMainController
参考变量。
没有春天
InterfaceMainController mainController = new MainController();
使用Spring注释
如果您使用的是Spring,则可以使用批注将MainController
对象与@component
和@Autowired
自动关联
@Component
public class MainController implements InterfaceMainController {
........
}
并使用这样的注释mainController
自动连接@Autowired
@Autowired
InterfaceMainController mainController