在java中声明嵌套类在接口内部有什么不好吗?

Rom*_*man 10 java oop

我有一个ProductService方法接口findByCriteria.该方法具有空的参数的,像一个长长的清单productName,maxCost,minCost,producer等等.

我通过引入参数对象重构了这个方法.我创建了类SearchCriteria,现在方法签名如下所示:

findByCriteria (SearchCriteria criteria)
Run Code Online (Sandbox Code Playgroud)

我认为这些实例SearchCriteria只是由方法调用者创建的,并且只在findByCriteria方法内部使用,即:

void processRequest() {
   SearchCriteria criteria = new SearchCriteria ()
                                  .withMaxCost (maxCost)
                                  .......
                                  .withProducer (producer);

   List<Product> products = productService.findByCriteria (criteria);
   ....
}
Run Code Online (Sandbox Code Playgroud)

List<Product> findByCriteria(SearchCriteria criteria) {
    return doSmthAndReturnResult(criteria.getMaxCost(), criteria.getProducer());    
}
Run Code Online (Sandbox Code Playgroud)

所以我不想创建一个单独的公共类SearchCriteria并将其放入ProductServiceInterface:

public interface ProductService {
    List<Product> findByCriteria (SearchCriteria criteria);

    static class SearchCriteria {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这个界面有什么不好的吗?你SearchCriteria上课的地方在哪里?

aio*_*obe 3

我觉得看起来不错。它清楚地表明 是专门SearchCriteria与 s 一起使用的ProductService

然而,有些人会认为嵌套类看起来有点奇怪,并声称这将是一种过度设计,并且包范围在大多数情况下都足够好,包括这种情况。