Java 通用方法

Java 通用方法,java,Java,我需要向这个通用方法发送一个整数数组和一个字符串数组,并找出其中是否存在某个数字或字符串。我编写了这段代码,但它在ife==30行上给出了一个错误,表示不兼容的操作数类型为E和int。请帮助 public class Ch2Lu3Ex2 { public static <E> void searchArray(E[] inputArray) { for(E e : inputArray) { if(e==30) {

我需要向这个通用方法发送一个整数数组和一个字符串数组,并找出其中是否存在某个数字或字符串。我编写了这段代码,但它在ife==30行上给出了一个错误,表示不兼容的操作数类型为E和int。请帮助

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