2016-12-02 39 views
-2

我有这个类,作为我将使用实例变量进行处理后返回所有的实例在一个呼叫中的一个变量

class Data{ 
    static int counter= 0; 
    boolean boolean1; 
    String string1; 

    public Data() { 
     counter++; 
    } 
} 

容器中,我有这样的方法,设置数据

的值
public Data setData() 
{ 
    Data data = null; 
    for (int i = 0; i < somecoutnerhere; i++) { 

     Data = new Data(); 
     Data.boolean1 = some boolean put here; 
     Data.string1 = "some string to be put here"; 
    } 

    return ProcessData(Data); 
} 

我也有这个类过程数据,这将使数据的使用和将构建响应

private class ProcessData 
{   
    private final Map<String, List<?>> map = new HashMap<String, List<?>>(); 
    int counter; 

    public ProcessData(Data data) 
    { 
     map.put("boolean1", data.boolean1); 
     map.put("String1", data.string1); 
     counter = data.counter; 
    } 

    public String someMethodToGenerateReturnData(){ 
    // some code here to make use of the Data collected. Will basically use map to construct the return String 
    } 
} 

我的问题是我无法弄清楚如何返回在setData()上的数据的for循环上创建的所有实例变量。有什么想法吗?

+0

您可以使用反射来获取所有实例变量,但不清楚为什么需要这个 –

+0

取决于需求...您可以使用List/array/set/collection来存储ProcessData的所有结果。在这里,除了最后一个循环之外,你会丢失数据的每个实例......那么你究竟在做什么? – AxelH

+1

只需将您的for-loop中创建的数据放入列表中并返回该数据?到目前为止,你所做的只是实例化一个新的数据对象,用数据填充它,然后一遍又一遍地覆盖它。 – Seth

回答

1

我的问题是,我无法弄清楚如何我可以返回()在for循环的数据调用setData上创建的所有实例变量。有什么想法吗?

根据这个你的问题不是“返回所有例如在一个呼叫中的一个变量”,因为你的头衔状态,而是一个关于如何在回国创建的所有Data -Objects问题的for循环,哪一个更容易。

虽然你的代码是错误的,所以我继续&纠正它(我希望我没有搞砸)。我也改名了几件事。

我所做的改变是:

  • 更名为 “boolean1” 和 “字符串1” 到 “trueOrFalse” 和 “串”
  • 添加一个公共的,完全参数构造函数的Data -class
  • 加入ProcessData -list到setData() -method,其被填充在for -loop (+评论)

但是,我强烈建议您检查一下您的体系结构,并了解一些有关命名约定或一般编码约定。名称应该指出方法/变量/类的目的或内容,“boolean1”并不是真的那样做。

关于架构:Data类似乎只存在于柜台,您可以很容易地改变它,使Data-类过时(除非在其他地方使用)。

数据类:

class Data { 
    static int counter = 0; 
    boolean trueOrFalse; 
    String string; 

    public Data() { 
     counter++; 
    } 

    public Data(boolean someBoolean, String someString) { 
     this.trueOrFalse= someBoolean; 
     this.string = someString; 
     counter++; 
    } 
} 

setData() - 方法:

public List<ProcessData> setData() { 
    List<ProcessData> processedDataList = new ArrayList<ProcessData>(); 

    for (int i = 0; i < someCounterHere; i++) { 
     processedDataList.add(new ProcessData(new Data(true, "testString")); 
     // a new Data-object is created (parameters true and "testString") 
     // a new ProcessData-object is created (parameter is the newly created Data-Object) 
     // the newly created ProcessData-object is added to the list 
    } 

    return processedDataList; 
} 

ProcessData -class:

private class ProcessData {   
    private final Map<String, List<?>> map = new HashMap<String, List<?>>(); 
    int counter; 

    public ProcessData(Data data) { 
     map.put("trueOrFalse", data.trueOrFalse); 
     map.put("string", data.string); 
     counter = data.counter; 
    } 

    public String someMethodToGenerateReturnData() { 
    // some code here to make use of the Data collected. Will basically use map to construct the return String 
    } 
} 
相关问题