[英]Implementing Generic Interfaces and inheritance
試圖在Java項目中實現泛型和繼承類。 因此,我創建了將繼承所有特定類和接口的“基礎”類和接口。
我的意思是,我有一個基本接口
public interface BaseServices<T> {
public boolean validate(T item, int id) throws Exception;
}
以及該接口的基本實現
public class BaseServicesImpl implements BaseServices<BaseBO> {
@Autowired
BaseDao dao;
CategoryBO bo;
public BaseServicesImpl()
{
this.bo = new CategoryBO();
}
@Override
public boolean validate(BaseBO item, int id) throws Exception {
return dao.validate("name",item.toString(), id);
}
}
其中BaseBO是所有其他對象都將擴展的業務對象。
然后,對於一個特定的對象,我將具有一個特定的接口,該接口擴展了Base接口。
public interface CategoryServices extends BaseServices {
}
及其實現:
public class CategoryServicesImpl extends BaseServicesImpl implements CategoryServices<CategoryBO> {
@Autowired
CategoryDao categoryDao;
public CategoryServicesImpl()
{
this.dao = categoryDao;
}
@Override
public boolean validate(CategoryBO item, int id) throws Exception {
return dao.validate("name",item.getName(), id);
}
}
在某些對象可以實現通用“ Validate”方法(僅驗證名稱)的地方,或將其擴展到所需類的公共類CategoryServicesImpl擴展BaseServicesImpl實現CategoryServices。
我該如何進行這項工作? 可能嗎? 我正在盡我所能來重用我的代碼。 讓我知道是否還有另一種方法。
編輯:我想做的是擁有一個基類,其中包含所有類的所有通用方法,比如創建,編輯,刪除,獲取,getAll等的基本方法。然后在每個類中也可以具有和覆蓋這些方法,因為在某些類中它們將有所不同,但是在大多數情況下,它們將執行相同的操作,因此它將調用在基類中定義的泛型類。
只需進行一些更改,即可輕松實現所需的目標:
public interface BaseServices<T extends BaseBO> {
boolean validate(T item, int id) throws Exception;
}
public interface CategoryServices
extends BaseServices<CategoryBO> {
}
public class BaseServicesImpl<T extends BaseBO>
implements BaseServices<T> {
@Override
public boolean validate(T item, int id) throws Exception {
return true;
}
}
public class CategoryServicesImpl
extends BaseServicesImpl<CategoryBO>
implements CategoryServices {
@Override
public boolean validate(CategoryBO item, int id) throws Exception {
return true;
}
}
關鍵是讓您的通用T
類型成為BaseBO
的后代,然后將BaseServicesImpl
類也調整為通用。
請注意 我對好的設計的評論 。 簡單是優質軟件的關鍵。 過度設計是通往瘋狂的道路。
如果您有一個接口,並且需要在實現該接口的類之間共享某些方法的實現,則可以使用Abstract Base Class來實現您需要共享的方法。
public interface Service<T> {
//note, interfaces are implictly public
boolean validate(T item, int id) throws Exception;
void foo();
void bar();
}
public abstract class BaseService<T> {
boolean validate(T item, int id) throws Exception {
return false; // a default implementation
}
public abstract void foo();
public abstract void bar();
}
public class FooService<T> extends BaseService<T>{
public void foo() {
println("foo");
}
public void bar() {
println("bar");
}
}
使用Java 8,還可以在interface中提供默認實現 。
public interface Service<T> {
boolean validate(T item, int id) throws Exception;
void foo();
void bar();
}
但是請注意,這可能導致某種多重繼承,這可能會使您的代碼難以推理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.