我试图搜索任何数据类型(Int、Strings、Chars等)的数组查看是否存在与您输入的元素匹配的元素。您应该返回匹配元素的索引。有两个类正在使用。
我得到的错误是:
"Cannot make a static reference to the non-static method find(Object[], Object) from the type ArraySearch"
它的建议是使方法静态,但是,这样做会在Search类中出现错误:
"Cannot make a static reference to the non-static type E".
搜索类:
public class ArraySearch<E> {
public int find (E[] array, E item) {
int index = 0;
for (int i = 0; i < array.length; i++) {
if (array[i].equals(item)) {
System.out.println("There is a element " + array[i] +
" at index " + i);
index = i;
break;
}
}
return index;
}
}
跑步者等级:
public class ArraySearchRunner {
public static void main(String[] args) {
String[] strings = new String[]{"Jim", "Tim", "Bob", "Greg"};
Integer[] ints = new Integer[]{1, 2, 3, 4, 5};
ArraySearch.find(strings, "Bob");
ArraySearch.find(ints, 4);
}
}
在这种情况下,最好的解决方案是什么?
谢谢
public class ArraySearch<E>
{
public int find (E[] array, E item)
{
int c = 0;
for (int i = 0; i < array.length; i++)
{
if (array[i].equals(item))
{
c++;
}
}
System.out.println("There is a element " + item +
" repeated " + c + " time(s)");
return c;
}
public static void main(String[] args)
{
String[] strings = new String[]{"Jim", "Tim", "Bob", "Greg","Bob"};
String[] strings2 = new String[]{"Jim", "Tim", "Bob", "Greg","Bob"};
Integer[] ints = new Integer[]{1, 2, 3, 4, 5,2};
Double[] dbl= new Double[] {1.2,3.6,8.4,8.4,8.4,3.6};
ArraySearch arr = new ArraySearch();
arr.find(strings, "Bob");
arr.find(strings, "Tim");
arr.find(ints, 2);
arr.find(dbl, 8.4);
enter code here
}
}
您需要创建类的实例来调用实例方法。比如:
class Demo {
public void show() { }
}
new Demo().show();
现在,我让你来实例化你的泛型类。
此外,您的find()
方法也被破坏。如果找不到元素,它将返回索引=0
。这是数组中的有效索引。您应该将索引初始化为
-1
:
int index = -1;
关于将方法设置为静态的尝试,它会给您带来错误,因为类型参数不适用于类的
static
成员。
来自Java泛型常见问题解答-Angelika Langer:
类的类型参数的作用域是该类的整个定义,但该类的任何静态成员或静态初始值设定项除外。这意味着类型参数不能用于静态字段或方法的声明,也不能用于静态嵌套类型或静态初始值设定项。
问题内容: 我的任务是用Java编写哈希表,该哈希表必须适用于任何数据类型。我正在编写的代码规则如下:-哈希表必须具有一个数组作为基础数据结构,其大小在构造对象时确定- 发生冲突时,应该放置碰撞的元素链接列表,该列表包含哈希表中该索引(键)处的所有元素 因此,对于基础数据类型,我做了一个LinkedList类型的数组(自定义,不是Java API LinkedList)。 当然,问题是实例化此数组
问题内容: 因此,我正在开发这个通用的HashTable类,并且希望将其通用地用于任何数量的传入类型,并且我还想将内部存储数组初始化为LinkedList的数组(出于冲突目的),其中为确保类型安全,每个LinkedList都被预先指定为HashTable类中的泛型类型。我该怎么做?以下代码最能阐明我的意图,但当然不会编译。 问题答案: Java中的泛型不允许创建具有泛型类型的数组。您可以将数组转换
我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。
问题内容: 我最近开始学习JAVA泛型。一切都说得通,我现在有点理解。但是有一件事让我烦恼-您无法创建通用类型的数组。 我想实现诸如队列和堆栈之类的抽象数据类型,但是要使用某种通用类型作为存储在堆栈中的基础数据。我将如何解决?我确定我想念但那是什么? 提前致谢。 问题答案: 《有效的Java》,第5章,GENERICS,第25项:首选列表而不是数组 : 数组在两个重要方面不同于通用类型。首先,数组
问题内容: 我有一个代表文本片段的泛型类。该文本片段可能具有多种不同模式(突出显示的不同类型)中的任何一种。这些模式用枚举表示。每个项目的Enum可能不同,但是它必须实现一个接口,该接口提供了一种将其中两个结合的方法(可以突出显示并加粗显示)。所以我有一个界面: 然后我的TextFragment是文本字符串和模式的容器。但是当我尝试声明该类时: 我收到以下错误: 令牌“扩展”的语法错误,预期 根据
问题内容: 我正在尝试创建一个泛型类型的数组。我收到错误消息: 我很困惑。任何线索为什么会这样。 问题答案: 其背后的原因是,您不能创建通用或参数化类型的数组,而只能 创建可验证的 类型(即可以在运行时推断出的类型)。 尽管可以将此类数组类型 声明 为变量或方法参数。这有点不合逻辑,但这就是Java的样子。 Java泛型和集合在第6章中广泛讨论了此问题和相关问题。