簡體   English   中英

Java - 從包含該庫的項目中獲取庫項目的信息

[英]Java - get information into library project from project which includes this library

我正在開發一個庫,它需要來自項目的一些配置信息,其中包括這個庫。 我在想的是在我的庫中使用一些抽象方法並強制應用程序來實現這些方法。 我在尋找的是:

  1. 庫中的A類有一些靜態抽象方法 ,比如有一個名為getURL()的方法;
  2. B類在實際應用中實現這些靜態方法,並從A類實現方法getURL()。
  3. 在我的庫中,我調用了A.getURL(),它應該從類B調用方法實現,它擴展了類A並且應該返回我的url。

但是抽象方法在Java中不能是靜態的。 是否有一些解決方法來實現相同的功能。

靜態抽象方法毫無意義,因為抽象方法應該由擴展類(它是OO的一部分)實現,而static表示非實例方法(不是OO)。

但是我最近在J2EE項目中遇到了類似的問題,其中庫需要一些特定的配置,具體取決於使用它的項目。

我們決定做的是在項目中有一個具有特定名稱的配置文件,庫應該在加載后立即讀取。 如果找不到文件和/或所需的配置,則拋出異常(您可以創建自己的異常)。

我認為這樣你可以將庫的實現與使用它的項目分離。

public abstract class A {

    protected static A INSTANCE;

    public static String getURL() {
        return INSTANCE.getURL();
    }

    protected abstract String getURL0();
}

class B extends A {

    static {
        INSTANCE = new B();
    }

    @Override
    protected String getURL0() {
        return "application-specific url";
    }
}

根據您對問題的回答,我建議如下:

為類檢索屬性的接口定義如下:

interface LibaryDetails {

    URL getURL();

    String getName();
}

然后創建一種某種類型的Factory方法,使您的庫運行並執行它。 將您的代碼重構為主要代碼,以便從此處訪問它。 使用此方法將接口作為參數:

public class LibraryFactory{
    public static void startLibrary(LibaryDetails details){
        URL url = details.getURL();
        String name = details.getName();
        // start Library things
    }
}

現在,您的庫只需要公開界面和靜態工廠。 您的應用程序只需將LibraryDetails接口的實現傳遞給工廠方法,您的庫就可以訪問這些信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM