Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型-如何传递对象数组_Java_Generics_Computer Science - Fatal编程技术网

Java 泛型-如何传递对象数组

Java 泛型-如何传递对象数组,java,generics,computer-science,Java,Generics,Computer Science,我们目前正在课堂上学习泛型,但我仍然感到困惑。我目前正在做一项作业,我的老师要我做的是使用二进制搜索算法搜索具有一定半径的圆。我相信我已经设置好了一切,但我对如何将对象数组传递给泛型方法感到困惑。如果我不能,我怎样才能使用泛型访问对象数组。我希望我问得对 这是我所拥有的,当然没有 public class Question1 { public static void main(String[] args) { Circle[] b = {new Circle(1),new Circle(

我们目前正在课堂上学习泛型,但我仍然感到困惑。我目前正在做一项作业,我的老师要我做的是使用二进制搜索算法搜索具有一定半径的圆。我相信我已经设置好了一切,但我对如何将对象数组传递给泛型方法感到困惑。如果我不能,我怎样才能使用泛型访问对象数组。我希望我问得对

这是我所拥有的,当然没有

public class Question1
{
public static void main(String[] args)
{
    Circle[] b = {new Circle(1),new Circle(2),new Circle(3),new Circle(4),new Circle(5)};
    System.out.println(b[0].getR());
    run(b,3,0, b.length-1);

}

/**
 *
 * @param <T>
 * @param b
 * @param key
 * @param low
 * @param high
 */
public static <T> Object run(T[] b , T key, int low, int high)
{
    int mid = ((low + high)/2);
    if(high < low)
    {
        System.out.print(-1);
    }
    if(key == b[mid])
    {
        System.out.println(b[mid]);
    }
    if(key < b[mid])
    {
        return run(b,key,low,mid-1);
    }
    else
    {
        return run(b,key,mid+1,high);
    }            
}
}
谢谢,
fish

如果我理解正确,第二个参数的类型需要是一个圆,而不是当前的整数3

public static void main(String[] args)
{
    Circle[] b = {new Circle(1),new Circle(2),new Circle(3),new Circle(4),new Circle(5)};
    System.out.println(b[0].getR());
    run(b, new Circle(3), 0, b.length-1);  // <-- change this line

}

泛型是一种在维护类型安全的同时将代码泛化到各种类型的方法。向某人介绍泛型的通常方法是比较非泛型列表接口和泛型列表接口。原始列表可以包含任何对象类型,因此不是类型安全的。原始列表可以同时包含您最喜爱的硬币和邮票收藏,这可能会在您去取回硬币但得到邮票实例时导致困难的错误

列表只能包含硬币实例。编译器将不允许在列表中插入戳记。只要程序编译时没有错误或警告,编译器保证每次你从列表中取出硬币时,你只能得到硬币

我的老师要我做的是使用二进制搜索算法 搜索具有特定半径的圆

这个作业不需要通用方法,所以我不知道为什么要你写一个,除非你没有透露作业的细节

您当前的解决方案包含一个突出的问题:您不能使用==运算符来测试对象之间的值相等性。在对象比较中,==运算符仅测试标识。这将打印错误:

System.out.println("my test" == new String("my test"));
上面有两个具有独立标识的对象:字符串文本和新创建的字符串实例。它们都具有不同的标识,即使它们具有相同的值,因此表达式的计算结果为false。对于对象之间的值比较,需要编写equals和hashCode方法。其计算结果为true:my test.equalsnew Stringmy test


还请注意,它们的objects key