使用濾波器設計模式。Java - 將字符串轉換爲接口實例
我有一個Context接口,有實現此接口的具體類,稱爲f.e.行爲目的和結構目的。
什麼我目前正試圖實現的是,當我添加CreationalPurpose類,並把它作爲前端的選項,一切都將繼續工作順利進行(過濾)
我有一個jsp即會返回「結構」,「行爲」等值。
但現在我需要創建StructuralPurpose類的實例。像Context context= new StructuralPurpose();
但我不知道我是否會得到'結構'或'行爲',我不想通過添加if語句來解決此問題,主要是因爲如果有人添加新的Purpose類,那麼該人員不必添加另一個if語句對此過濾器。
這是可能的嗎?我在想也許有一個叫purposeString串並解決問題,像這樣:
String purpose = purposeString + "Purpose";
Context context = Class.forName(purpose).newInstance();
但是,這將導致到一個錯誤,說:類型不匹配:不能從捕獲#1的轉換?到上下文
那麼有沒有什麼辦法可以做到這一點?
隨着演員(Context) Class.forName(purpose).newInstance();
我會得到一個ClassNotFoundException。這些課程是在不同的包,不知道這是否重要。這裏是我使用的代碼:
String behav = "filter.Behavioral";
String purpo = behav+"Purpose";
Context behavioral = null;
try {
behavioral = (Context) Class.forName(purpo).newInstance();
} catch (InstantiationException e) {
System.out.println("\n basically failed");
} catch (IllegalAccessException e) {
System.out.println("\n not allowed");
} catch (ClassNotFoundException e) {
System.out.println("\n not found");
}
僅用於測試目的,此代碼將返回'未找到'。
添加投:'上下文的背景下=(上下文)的Class.forName(目的).newInstance();' – Tunaki
編輯該問題是因爲註釋會變得太長,給ClassNotFoundException – Ivaro18
'Class.forName'需要完全限定的類名,而不僅僅是類名。 – Tunaki