2014-05-05 29 views
0

我想在我的Uni项目的Java中创建一个API。创建一个类来扩展一个API

以下可能。

我有MyClass的2个版本,其中一个不包含方法体中的代码。

例如:

完整版本:

public MyClass { 
    public String name; 

    public MyClass(String name) { 
      this.name = name; 
    } 

    public String getSpecialVersion(){ 
     return name + name; 
    } 
} 

API版本:

public MyClass { 
    public String name; 

    public MyClass(String name) {} 

    public String getSpecialVersion(){ return null; } 
} 

的想法是用户扩展的类的API版本,但在完整版类在运行时加载。

这是可能在Java中,还是有更好的方法来做到这一点?

在此先感谢!

+1

也许你想使用一个接口? –

回答

1

您想创建一个接口并让“with code”-version 实现该接口。

public interface IMyClass { 

    public String getSpecialVersion(); 

} 

实现:

public class MyClass implements IMyClass { 

    public String name; 

    public MyClass(String name) { 
     this.name = name; 
    } 

    @Override 
    public String getSpecialVersion() { 
     return name + name; 
    } 

} 

不能定义接口的构造函数(在接口和定义域是一种非常规的)寿,所以你可能想看看抽象类的是,太:

public abstract class AbstractMyClass { 

    public String name; 

    public AbstractMyClass(String name) { 
     this.name = name; 
    } 

    public abstract String getSpecialVersion(); 

} 

此类可通过的具体类扩展添加方法体:

public class MyClass extends AbstractMyClass { 

    public MyClass(String name) { 
     super(name); 
    } 

    @Override 
    public String getSpecialVersion() { 
     return name + name; 
    } 

} 
+0

啊,我没有考虑使用抽象类。但想一想,我不应该有这样的公共领域!我会尝试重构一个接口:) cheers – FraserK

+0

如果你想要在运行时加载一个接口的实现,并且你不需要像Guice或Spring这样的依赖注入框架的全部功能/复杂性,你可以看看JDK内置的ServiceLoader - http://docs.oracle.com/javase/7/docs/api/index.html?index-filesindex-1.html – adamretter