我有以下简单函数返回字符串数组String
中String[]
的位置。
private int getIndexOf(String needle, String[] haystack) {
int indexOfNeedle = -1;
for (int index=0;index<haystack.length;index++) {
if (haystack[index].equals(needle)) {
indexOfNeedle = index;
break;
}
}
}
我想将其转换为ArrayList类的方法,以便我可以使用:
调用它String[] myArray = {"red","green","blue"};
int indexOfGreen = myArray.getIndexOf("green");
(我知道我可以包含的现有库包括indexOf
,但重新发明这对我来说也是一个教训。)
我认为该方法将涉及extends ArrayList
,这可能是我需要扩展的类,因此我需要修改上面的函数以适应该扩展类...
不是在方法版本中使用haystack
,我也希望能够在this
内搜索引用该方法的数组对象。
我还认为我可能需要用这个新的扩展类数组替换我的String []数组(或者我可以使用覆盖来将我的新方法包含在激活的String Array类中吗?)。 / p>
正如我所说的,这是为了帮助我学习如何在Java中一般地完成这项工作,因此练习本身可能看起来有点无意义,问题的关键点并非如此。学习如何在数组中找到元素的位置 - 这仅仅是一个例子。
答案 0 :(得分:1)
(此答案基于评论,其中说的是关于扩展功能的问题)
Java不允许扩展功能,但您可以使用替代
其他一些JVM语言,如Kotlin,确实支持扩展功能,但Java本身不支持
答案 1 :(得分:0)
不是一个好主意。
最佳做法是在声明中使用更通用的类型(接口)。
void f(List<String> list) { ... }
List<String> list = new ArrayList<>();
这允许其他实现,并且用作参数更灵活/更强大。
尝试扩展这些所有已知的类/接口将导致诸如使用新类重新包装旧类等伪像,等等。
而是在实用程序类中使用静态函数。与Collections
和Arrays
类一样。使用binarySearch
和其他好东西。
顺便说一下,提到的功能可能存在,而且可能存在 我希望建立在现有的一般功能上,而不是重新发明 轮子。
int index = Arrays.asList(haystack).indexOf(needle);