通过在Java中创建对象来引用接口

时间:2018-10-27 00:35:39

标签: java

一个类是否有可能通过使用接口引用从另一类访问该方法?

假设我有一个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

4 个答案:

答案 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. 将对象传递给LoginUIController的构造函数。
  2. 使用控制反转(IOC)/依赖注入。

到目前为止,选项#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