如何在Java中声明“成员字段”?

时间:2010-05-10 20:03:48

标签: java android

这个问题可能揭示了我在Java中完全缺乏知识。但是,让我首先向您展示我认为宣布“成员字段”的正确方法:

public class NoteEdit extends Activity {

private Object mTitleText;
private Object mBodyText;

我正在关注Android(here)的google记事本教程,他们只是说:“请注意,mTitleText和mBodyText是成员字段(您需要在类定义的顶部声明它们)。”我以为我得到了它,然后意识到这一小段代码无效。

if (title != null) {
            mTitleText.setText(title);
        }
        if (body != null) {
            mBodyText.setText(body);
        }

所以要么我没有正确设置“成员字段”,我认为所需要的只是将它们声明为NoteEdit类顶部的私有对象,否则我会遗漏其他内容。提前感谢您的帮助。

更新

我被要求显示这些字段在哪里被初始化是另一个代码片段希望它有用...

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.note_edit);
    Long mRowId;
    mTitleText = (EditText) findViewById(R.id.title);
    mBodyText = (EditText) findViewById(R.id.body);

所以基本上出现的错误来自eclipse: “方法setText(String)未定义为Object”

类型

7 个答案:

答案 0 :(得分:7)

当您声明字段和变量时,为它们提供比Object更具体的static type通常会很有帮助。因为您已将mTitleText声明为Object,所以编译器只知道如何在常规Object class definition上调用方法。 setText不是一种方法,所以没有演员或其他诡计就不合法。

你应该做的是弄清楚你的领域应该是什么类型。我不知道Android,但我认为有一个文本标签类定义了你的setText方法。如果您将字段更改为定义,

private EditText mTitleText;

你会发现事情应该会好得多: - )

答案 1 :(得分:0)

除非您将这两个字段设置在其他位置,否则它们不会被初始化。因此,当您稍后使用它们时,它们是null并导致异常。 Java引用类型初始化为null。不具有null能力的基本数据类型初始化为0。

答案 2 :(得分:0)

您的mBodyText字段需要输入以允许访问setText方法。

e.g:

private BodyText mBodyText;

答案 3 :(得分:0)

它无效,因为您的对象未初始化。 mTitleText文本应该是TextView 然后你需要初始化它

mTitleText = findViewById( R.id.yourviewid );

然后再做

mTitleText.setText(title);

答案 4 :(得分:0)

它们被标记为私人,所以你不能在课堂之外。如果您想要在课堂外访问,则必须在您的字段前使用关键字public。但不建议使用此属性

答案 5 :(得分:0)

在这种情况下,您需要为两个成员变量赋值。我相信NoteEdit类有一个与之关联的布局xml文件。在尝试引用其属性之前,需要将该布局中的文本字段对象分配给对象。

mTitleText = ( TextView ) findViewById( R.id.name_of_the_field_in_the_layout_file )

上面的答案也是正确的。您应该在类的顶部为这些变量指定类型,而不只是将它们设为Objects

答案 6 :(得分:0)

声明引用的名称和类型是一回事;初始化它指向堆上的有效内存位置是另一个。您需要在类的构造函数中初始化数据成员。

默认构造函数默认情况下将引用初始化为null。如果您还没有编写构造函数来初始化您的数据成员引用,那么这可能是您遇到问题的原因。