【问题标题】:How is this interface and class being implemented?这个接口和类是如何实现的?
【发布时间】:2021-02-26 07:06:28
【问题描述】:

我是这个领域的新手。

这是一个代码sn-p:

JAXBContext jobj = JAXBContext.newInstance(Employee.class);

Marshaller mobj = jobj.createMarshaller();   

Employee emp1=new Employee(1,"Jordan",50000);  
  
mobj.marshal(emp1, new FileOutputStream("employee.xml")); 

现在我知道 JAXBContext 是一个抽象类,而 Marshaller 是一个接口。

现在 createMarshaller()(Return type Marshaller) 如何返回一个 Marshaller 对象? JAXBContext 是否实现了 Marshaller?即使实现那么它是如何返回对象的?因为我试图在一个类中实现一个接口,然后创建了一个返回该接口对象的方法,但它抛出了错误。

试图模拟:

界面: 公共接口

 Marshall {
    
    public Marshall marshaller();
    
    public int m();

}

类:

public class JaxB implements Marshall{
    
    
    @Override
    public Marshall marshaller() {
        
        return new Marshall(); //error
        
    }

    public int m(){
        return 1;
    }

}

你能纠正我的课程吗?

【问题讨论】:

  • createMarshaller 显然实例化了一些实现接口的类,并返回实例。接口的任何实例都是实现该接口的某个类的实例。这就是接口的工作原理。
  • 我试图在一个类中实现一个接口,然后创建了一个返回该接口对象的方法,但它抛出了错误
  • 然后在你试图这样做的代码中,你做错了。
  • 好的,请向我们展示您的代码,然后您尝试了什么以及错误来自哪一行
  • 您的意思是 return new JaxB(); 在您发布的新代码中。虽然如果有一些 other 类实现该接口会更有意义,并且该方法返回 that 类的实例。

标签: java jaxb


【解决方案1】:

只需在该类中创建一个方法,并在返回语句中添加您要发送的参数,然后在您要调用该方法的类中创建一个对象,该方法将接收该方法的输出

【讨论】:

  • 我真的很欣赏你的回答。它很直观。能否提供示例代码?
【解决方案2】:

以下是如何让方法返回接口的实例:

interface Foo {}

class FooImplementation implements Foo {}

class FooFactory {
    Foo getFoo() {
        return new FooImplementation();
    } 
} 

【讨论】:

  • 但是 createMarshaller() 返回一个 Marshaller 对象 [Marshaller mobj = jobj.createMarshaller();] 这是一个接口。但是 FooFactory 返回的是 FooImplementation 对象而不是 Foo。所以模拟没有像预期的那样工作。
  • FooImplementation 实现Foo。所以FooImplementation 的实例是Foo 的实例。 这就是接口的工作原理。返回Marshall的方法必须返回一个实现Marshall的类的实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 2017-10-23
相关资源
最近更新 更多