使用类而不创建它的新实例

时间:2018-02-12 14:47:14

标签: java android

Newish to Java,是Android开发的新手。

我遵循了以下教程 - Android tutorial (Basic Hello World App),我现在稍微改变它作为概念证明。

基本上我想使用我创建的课程,但是我遇到了一些困难。课程如下所示。

public class Employee {

    private HashMap<String, String> employees = new HashMap<>();

    public void setEmployees(String name, String jobTitle) {
        employees.put(name, jobTitle);
        System.out.println(employees);
    }

    public String getEmployees(String name){
        return employees.get(name);
    }

}

我从HashMap填充MainActivity.java。使用上面的set方法,这可以按预期工作。我测试了它,我可以看到HashMap具有所需的条目数。

我的问题是何时收回数据。我该如何使用该课程。我有一个文件名DisplayMessageActivity.java,其中包含以下代码。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;


public class DisplayMessageActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);

        // Get the Intent that started this activity and extract the string
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        // Capture the layout's TextView and set the string as its text
        TextView employee_name = findViewById(R.id.employee_Name);
        employee_name.setText(message);
        TextView employee_title = findViewById(R.id.employee_Title);
        employee_title.setText(employee.getEmployees(message));
    }
}

最后一行是我收到错误的地方。这是因为它不知道employee是什么。我认为我需要添加:

Employee employee = new Employee;

如果我在onCreate方法中添加它,它会创建一个新实例,因此它有新值。我也在onCreate上方添加了相同的结果。

我错过了什么?

3 个答案:

答案 0 :(得分:1)

要保留您想要变量和方法静态的数据

public class Employee {

private static HashMap<String, String> employees = new HashMap<>();

public static void setEmployees(String name, String jobTitle) {
    employees.put(name, jobTitle);
    System.out.println(employees);
}

public static String getEmployees(String name){
    return employees.get(name);
}

}

这意味着一次只能存在一个版本。你可以直接调用这个类和方法。

employee_title.setText(Employee.getEmployees(message))

答案 1 :(得分:0)

将您的Employee类代码替换为下面的

public class Employee {

private static HashMap<String, String> employees;

public Employee() {
    if (employees == null) {
        employees = new HashMap<>();
    }
}

public void setEmployees(String name, String jobTitle) {
    employees.put(name, jobTitle);
    System.out.println(employees);
}

public String getEmployees(String name) {
    return employees.get(name);
}
}

希望对你有所帮助。

答案 2 :(得分:0)

您可以使用public class Employee { private static sInstance; private HashMap<String, String> employees = new HashMap<>(); private Employee(){ // No instance available } public static synchronized Employee getInstance(){ if(sInstance == null){ sInstance = new Employee(); } return sInstance; } public void setEmployees(String name, String jobTitle) { employees.put(name, jobTitle); System.out.println(employees); } public String getEmployees(String name){ return employees.get(name); } } 来保留您的员工。

Employee.getInstance().getEmployees(message);

稍后您可以使用内存缓存,如下所示:

initGroup() {
   let rows = this.reportForm.get('rows') as FormArray;
   rows.push(this.fb.group({
       expense_account: ['', Validators.required],
       description: ['', Validators.required],
       amount: ['', Validators.required],
   },{validator: this.customValidator})) // it will automatically be applied to the group
}