簡體   English   中英

使用類而不創建其新實例

[英]Using a class without creating a new instance of it

對Java不熟悉,對Android開發又不陌生。

我遵循了以下教程-Android教程(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);
    }

}

我從MainActivity.java填充HashMap 使用上面的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之上,具有相同的結果。

我想念什么?

要保留數據,您需要將變量和方法設為靜態

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))

用下面的代碼替換您的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);
}
}

希望對您有幫助。

您可以使用Singleton in-memory cache來保留您的員工。

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM