【问题标题】:java add function to extended class [duplicate]java将函数添加到扩展类[重复]
【发布时间】:2018-10-11 10:13:13
【问题描述】:

我有一个扩展 RecyclerView.Adapter 的类。

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {
.
ArrayList<String> mDataset;
.
.
.

我为这个类添加了一个新的公共成员函数来返回mDataset

public  ArrayList<String> getmDataset() {

    return mDataset;
}

问题是在实例化 MainAdapter 时我无法在此类中引用 getmDataset()

当我输入 new MainAdapter.getmDataset() 时,它显示 cannot resolve method 错误。

如何引用 getmDataset() ???

【问题讨论】:

  • (new MainAdapter()).getmDataset() ???
  • 发布MainAdapter.java。我的意思是完整的代码。
  • 这是非常基本的:静态方法不需要相应类的对象,但它们只能访问静态数据。非静态方法可以访问非静态字段,但您只能在类的实例上调用它们。如果您还不了解这些基础知识……我建议您花几周的时间专注于 Java 基础知识。不要做“android”,除非你精通基本的java。
  • 和不相关的:A) 阅读有关 java 命名约定...使用像 mDataSet 这样的后缀符号是不好的做法 B) 当你继续使用这些名称时:不要暴露它们在界面中 - 该方法应该(如果有的话)命名为getData() 或类似名称。请注意这里令人困惑的命名:您称其为 data set,但您使用 list 作为类型?
  • 恢复:通过调用MainAdapter.getmDataset(),您正在尝试访问MainAdapter 类的静态方法,而getmDataset() 不是静态的。使用(new MainAdapter()).getmDatabaset()就可以访问了。

标签: java android class reference


【解决方案1】:

如果您从任何类中引用 getmDataset(),那么您必须创建类的实例,例如

MainAdapter ma=new MainAdapter();
ma.getmDataset();

或者来自同一个班级你可以写this.getmDataset();

或者如果您的mDataset 是静态成员,那么您可以将getmDataset() 设为静态

public static ArrayList<String> getmDataset() {
  return mDataset;
}

并称之为MainAdapter.getmDataset()

【讨论】:

    猜你喜欢
    • 2013-04-19
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多