【问题标题】:Calling get (array static method) from an array instance从数组实例调用 get(数组静态方法)
【发布时间】:2019-11-02 20:40:42
【问题描述】:

Java 新手,以及一般的 OOP。 我正在做一个在线 Lynda 课程,课程中有一个使用 Array.get 从数组中提取第二项的示例:

String[] myFavoriteCandyBars = {"Twix", "Hershey's", "Crunch"};
System.out.println(Array.get(myFavoriteCandyBars, 2));

导师解释说get是“Array”类的静态方法。

但是当我尝试定义时:

 `Array[] testarray = new Array[10];`

并使用:

 `testarray.get(testarray[10]);`

我收到一个错误: cannot resolve method 'get(java.lang.reflect.Array)'

但我不明白为什么 - testarray 是类 Array 的对象,而类 Array 有一个方法“get”,所以虽然这是不好的做法,但为什么我不能这样做?

【问题讨论】:

  • Array.get(testarray, 10); 而不是 testarray.get(testarray[10]);
  • @goodvibration 这有点不正确

标签: java arrays methods static instance


【解决方案1】:

Array 类是一个仅包含公共静态方法的内部 Java 类,其预期用途是不被直接实例化。以下代码:

testarray.get(testarray[10]);

失败,因为testarray 的类型为Array[],而不是Array,因此没有可用的静态方法get()。假设你可以在实例上调用Array#get,它应该可以工作,但如上所述,Array 不能被实例化。

使用Array 的更典型方式是:

String[] testarray = new String[10];
testarray[1] = "Snickers";
System.out.println(Array.get(testarray, 1));

也就是说,创建一个所需类型的数组,然后使用Array#get 访问您想要的任何元素。

【讨论】:

  • 我知道它不应该那样使用,但问题是即使我尝试也无法使用它,我的问题是为什么? testarray 是 Array 类的对象,而 Array 类有一个方法“get”,为什么不起作用呢?
  • Array#get() 是一个静态 方法,与Array 类相关联,而notArray 类的一个实例相关联。查看实例与静态方法,以更好地了解此处发生的情况。
  • 但这正是我最初的问题——“为什么我不能这样做?”。当然,我在问这里之前尝试过查看它。我看了看:geeksforgeeks.org/static-methods-vs-instance-methods-java,最后说:“nstance 方法可以直接访问静态变量和静态方法。”所以我仍然不知道为什么这是不可能的..
  • @guest2020 你的代码当然可以工作,see here,还有我更新的答案。
  • 谢谢,查看了数组定义,发现就像你说的 - “类数组不可实例化”(在评论中这么说):构造函数在“私有”中,新的实例方法是静态(单例)。如果我错了,请纠正我。
【解决方案2】:

get() 不是数组类中的方法(如在 byte[] 对象中)。 get()Array 类中。做Array.get(testarray, 0) 是你想要的。尽管如此,不要这样做,而是使用testarray[0]

当你使用静态方法时,你不应该从对象调用它,你应该使用类实例,所以不要这样做

Object o = new Object();
o.staticMethod();

做:

Object.staticMethod();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多