队列连接已实例化?

Queue Connection Instantiated?

我正在做一个消息队列的例子。当我查看文档时, QueueConnection 是一个接口,但它在示例代码中被实例化。这怎么可能?我知道它扩展了连接接口。所有解释都有助于进一步了解我的知识:)

不完全确定您的具体情况,一些代码可能会有所帮助。

如果您在 EJB 中注入此资源,则该对象可能会指向该接口。

获取连接对象句柄的另一种方法是调用 createConnection() 方法。在这种情况下,对象最终将与接口具有相同的类型。

但就您而言,您从未使用过 new QueueConnection()。

有关如何将对象引用到接口 http://www.tutorialspoint.com/design_pattern/factory_pattern.htm(可用于任何 java 接口)

的更多详细信息,请参阅此示例设计模式

我将重点关注您问题的一个非常具体的部分

QueueConnection is an interface, but it's being instantiated in sample code

考虑以下代码:

public class Program {
    public static void main(String[] args){
        MyInterface myVar = new MyInterface(){ 
            public void myMethod(){ 
                System.out.println("hello World"); 
            }
        };
        myVar.myMethod();
    }

    private interface MyInterface{
        void myMethod(); 
    }
}

基本上,一个接口就是一个契约,任何实例化它的 class 都必须履行契约。如果你能写一个匿名 class 你可以让它看起来好像你已经实例化了接口。

你甚至可以做这样的事情(虽然没有用)

public class Program {
    public static void main(String[] args){
        MyInterface myVar = new MyInterface(){ };
    }

    private interface MyInterface{ }
}

您可以在此处查看更多相关信息:https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html