Java 通用方法
我需要向这个通用方法发送一个整数数组和一个字符串数组,并找出其中是否存在某个数字或字符串。我编写了这段代码,但它在ife==30行上给出了一个错误,表示不兼容的操作数类型为E和int。请帮助Java 通用方法,java,Java,我需要向这个通用方法发送一个整数数组和一个字符串数组,并找出其中是否存在某个数字或字符串。我编写了这段代码,但它在ife==30行上给出了一个错误,表示不兼容的操作数类型为E和int。请帮助 public class Ch2Lu3Ex2 { public static <E> void searchArray(E[] inputArray) { for(E e : inputArray) { if(e==30) {
public class Ch2Lu3Ex2
{
public static <E> void searchArray(E[] inputArray)
{
for(E e : inputArray)
{
if(e==30)
{
System.out.println("Element found in integer array");
}
else if(e=="raj")
{
System.out.println("Element found in string array");
}
}
}
public static void main(String[] args)
{
Integer[] integerArray = {10,20,30};
String[] stringArray = {"robin","raj","ravi"};
searchArray(integerArray);
searchArray(stringArray);
}
}
问题是,您不知道e是整数还是字符串,并且无法将字符串与整数进行比较,反之亦然 一种解决方案是将所寻求的项目也传递给您的方法-它可能如下所示:
public static <E> void searchArray(E[] inputArray, E soughtItem) {
for (E e : inputArray) {
if (e.equals(soughtItem)) {
System.out.println("Element found in integer array");
}
}
}
还要注意,对于相等测试,应该使用等于而不是==
最后,所有这些都是其他人写的:
Set<String> set = new HashSet<String> (stringArray);
if (set.contains("raj")) System.out.println("Found raj");
问题是,您不知道e是整数还是字符串,并且无法将字符串与整数进行比较,反之亦然 一种解决方案是将所寻求的项目也传递给您的方法-它可能如下所示:
public static <E> void searchArray(E[] inputArray, E soughtItem) {
for (E e : inputArray) {
if (e.equals(soughtItem)) {
System.out.println("Element found in integer array");
}
}
}
还要注意,对于相等测试,应该使用等于而不是==
最后,所有这些都是其他人写的:
Set<String> set = new HashSet<String> (stringArray);
if (set.contains("raj")) System.out.println("Found raj");
有两个错误,都必须纠正: 1将其修复为:ife instanceof Integer&&Integere==30-您必须检查e是否是Integer的实例 必须使用equals方法比较两个字符串:
else ife.equalsraj有两个错误,必须修复这两个错误: 1将其修复为:ife instanceof Integer&&Integere==30-您必须检查e是否是Integer的实例 必须使用equals方法比较两个字符串:
else ife.equalsraj在比较对象时不要使用==!更改为equals方法,应该可以工作
public class Ch2Lu3Ex2
{
public static <E> void searchArray(E[] inputArray)
{
for(E e : inputArray)
{
if(e.equals(30))
{
System.out.println("Element found in integer array");
}
else if("raj".equals(e)) //This way no null pointer will occure
{
System.out.println("Element found in string array");
}
}
}
public static void main(String[] args)
{
Integer[] integerArray = {10,20,30};
String[] stringArray = {"robin","raj","ravi"};
searchArray(integerArray);
searchArray(stringArray);
}
}
比较对象时不要使用==!更改为equals方法,应该可以工作
public class Ch2Lu3Ex2
{
public static <E> void searchArray(E[] inputArray)
{
for(E e : inputArray)
{
if(e.equals(30))
{
System.out.println("Element found in integer array");
}
else if("raj".equals(e)) //This way no null pointer will occure
{
System.out.println("Element found in string array");
}
}
}
public static void main(String[] args)
{
Integer[] integerArray = {10,20,30};
String[] stringArray = {"robin","raj","ravi"};
searchArray(integerArray);
searchArray(stringArray);
}
}
这里有很多错误,首先是你几乎不应该用==来比较对象,而是用equals,其次你根本不需要泛型。这里有很多错误,首先是你几乎不应该用==来比较对象,而是用equals,其次,您根本不需要泛型,或者简单地说:publicstaticvoidsearcharrayobject[]inputArray,ObjectsoughtItem@biziclop然后可以调用您的方法:searchArraysomeIntegerArray,ABC;这可能是您在编译时想要防止的事情。或者简单地说:publicstaticvoidsearchArrayObject[]inputArray,ObjectsoughtItem@biziclop然后可以调用您的方法:searchArraysomeIntegerArray,ABC;这可能是您在编译时想要防止的事情。Integer也应该与equals进行比较。@assylias,我不同意。在这种情况下,与int常量进行比较是可以的。很好的一点是,整数将被取消绑定,==将比较int。整数也应该与等于进行比较。@assylias,我不同意。在本例中,与int常量进行比较是可以的。很好的一点是,整数将被取消装箱,并且==将比较int.+1作为空指针观察值。为什么不对e.equals30应用相同的逻辑?您也将在那里得到一个空指针,并且在它到达第二个比较之前:-P+1表示空指针观察值。为什么不对e.equals30应用相同的逻辑?您也将在那里得到一个空指针,并且在它到达第二个比较之前:-P