类实现和参数

时间:2013-12-11 22:18:11

标签: java multithreading interface implementation

我正在为将来计划使用的服务器制作基本大纲。如果你愿意的话引擎。

基本上,我正在创建一个客户端/服务器类,这些类将被提取到一个jar中,稍后我会将它们包含在类路径中,就像使用lwjgl一样。

在我的服务器类中,它需要在客户端连接到它时创建一个新的类对象。 例如:

Thread t = new Thread(new MainServerThread(clientSocket));

现在,最初,这个MainServerThread()是由我制作的,并实现了Runnable。现在,由于需要如何,MainServerThread()类型类需要由引擎外部的程序员进行。

我的问题是,如果我创建一个程序员可以实现的接口,并运行它,

  1. 接口是否也可以让客户端实现runnable?比如,接口可以实现runnable然后传递吗?
  2. 可以实现我的接口的类,假设该类被称为test,我可以让我的服务器使用该类作为参数吗? (我的问题很难写,所以这里有一个例子)
  3. SERVER ENGINE(我正在制作的):

    public class Server{
          public Server(ServerThread st){ //serverthread is the name of my interface
               st.haha();
          }
    }
    

    客户端使用我的服务器:

    public class test implements ServerThread{ //all the methods are imported
        public test(){
            new Server(this);
        }
    
        public void haha(){
            System.out.println("hi");
        }
    }
    

    现在为什么我不出去测试这个?我做了,它对我没有用......

    那么我如何才能达到这种性质呢?

    编辑:感谢您的快速解答!我现在想弄清楚为什么它不能开始......但我会尽快接受答案!

2 个答案:

答案 0 :(得分:1)

1)您可以使您的界面扩展可运行的界面:

public interface MyInterface extends Runnable { ... }

2)是的,您可以像在示例中那样new Server(this)

答案 1 :(得分:1)

  

1)接口是否也可以使客户端实现runnable?比如,接口可以实现runnable然后传递吗?

是的。您可以使interface继承其他interface的属性。

public interface IClient extends Runnable
  

2)可以实现我的接口的类,假设该类被称为test,我可以让我的服务器使用该类作为参数吗? (我的问题很难写,所以这里有一个例子)

是的,你可以,你提供的代码应该有用。

但我认为你想做的是......

请记住,重要的是你要记住模型。该模型是client-server模型。这意味着,服务器充当所有客户端的交换机,但它是从服务器请求连接的客户端。它就是这样的。

public class Client implements IClient
{
    public void haha()
    {
         // Prints a value to the server.
         getConnection().writeline("hi");
    }

    public BufferedWriter getConnection()
    {
         // Here you request a connection from the server.
         String ip = "10.20.50.60"; // Example.

         // Get the connection via your own classes.
         BufferedWriter out = new BufferedWriter(getOutputStream(ip));

         return out;

    }

    private OutputStream getOutputStream(String ip)
    {
        // Logic to get the socket stream pointing to the server.
    }
}

并且server将有一个方法来接收这些数据,并决定如何处理它,并且这样做,它需要在客户端写入的流上监听slave 。从属侦听,获取数据并传递给逻辑。逻辑决定要做什么,并传递到输出到适当流的写入类。