在Java中使用内部类

时间:2013-03-29 06:33:16

标签: java

我正在推荐推荐系统。我设计了一个类推荐:

class Recommend{
    Path path; //recommended path, self-defined class. This is the problem!
    //some parameters and Models        
    private Map<Integer, List<Integer>> Model1;
    //...other pram and models

    //methods
    public void getPath();
    public double score(int place);//
}

这是我的问题:我构建一个Recommend实例,加载模型。然后我通过调用该实例的getPath方法搜索路径。我的路径是时间敏感的,其中包含一个位置列表以及正确的时间:

class Path{
    List<Integer> path;
    List<Integer> times;
    double socre;

    public void add(int place, double time);
}

我想调用add(int,double)来添加一个位置和相应的路径时间,同时更新新路径的分数。所以在这里我想称为score(int),这是一种推荐方法

我应该如何设计Path,它应该是推荐的内部类吗?

更新

getPath(int place, double startTime);
//try greedy searching to find a time sensitive path that scored highest, 
//go through all possible places and scored them.

socre(int place, double time);
//In fact there are multiple score methods correspond to different models,
//**and notice here I modify the param to int place from Path path**
//This function evaluates the score of current place and time(used in greedy searching)

add(int place, double time);
//add a new place and time(which is proved by greedy searching to be the best)
//I want this update the score of place itself...okay maybe I should place this function in Recommend

2 个答案:

答案 0 :(得分:1)

您的“getPath()”方法是问题的一部分;它“什么都不做”。您的“推荐”类似乎是为了对路径进行评分而设计的 - 并且路径似乎并未实际暴露在“推荐”之外。您可能会考虑做的是在Recommand上公开一个新方法,即“add(int place,double time)”,并让该方法更新路径,然后调用PRIVATE“scorePath()”方法。然后path应该是一个内部类,因为它的唯一功能就是保存数据结构。

您可以通过在JavaDoc中写下每个类的目的来阐明您要做的事情。每个班级都应该有一个明确的目的。例如,如果您已经完成了该操作,则发现“路径”不需要出现在“推荐”之外,那么您可以将其设为私人会员。

答案 1 :(得分:0)

使用内部类成分的天气(正如您所做的那样),您可以实现目标。我认为事情更复杂,因为你没有遵循Separation of Concern原则。

想一想为什么在推荐类中需要 getPath()得分()方法。与 add()方法一样, getPath()也应该是路径类的一部分。