队列连接是否已实例化?

时间:2015-10-02 17:45:51

标签: java queue jms message

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

2 个答案:

答案 0 :(得分:0)

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

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

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

但是到了你的观点,你永远不会使用新的QueueConnection()。

有关更多详细信息,请参阅此示例设计模式,了解如何将对象引用到接口http://www.tutorialspoint.com/design_pattern/factory_pattern.htm(可用于任何Java接口)

答案 1 :(得分:0)

我将专注于你问题的一个非常具体的部分

  

QueueConnection是一个接口,但它正在示例代码中实例化

请考虑以下代码:

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(); 
    }
}

基本上,接口是契约,任何实例化它的类都必须履行合同。如果您可以编写匿名类,则可以使其看起来像是实例化了界面。

你甚至可以做这样的事情(尽管没有用处)

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