为什么在Java中可以实现以下功能?
Integer[] ints = (Integer[])new Comparable[10];但它在运行时会获得ClassCastException。new一个接口数组的用法是什么。
发布于 2017-08-10 18:21:03
要回答特定问题,请执行以下操作:
Comparable toComplare[] = new Comparable[10];为什么不创建一个允许您存储实现可比较接口的任何对象的数组?!
要点是:接口表示一个“公共功能”--只查看该“视图”中的对象可能会很有帮助。
当然,存储在该数组中的对象总是某种“真实”类--但所有这些对象都将实现Comparable接口提供的功能。
所以你可以这样做:
toCompare[0] = new Integer(5);
toCompare[1] = new BigDecimal("3.2");
...我并不是说这是你经常使用的东西,但正如我所说的-它允许你在特定的、特定的“视图”下“收集”对象的功能。同样值得指出的是:拥有这样的数组是否意味着您可以使用而不是:
toCompare[0].compareTo(toCompare[1]);成功!
除此之外:类型转换总是暗示着你,程序员知道一些编译器不知道的东西。因此,编译器后退一步,让你这样做-假设你知道你在做什么。但是,由于您在问题中显示的代码显然是不正确的,因此在运行时,实际情况会反过来伤害您。是的,可以在编译时确定给定的代码是不正确的。
发布于 2017-08-10 18:20:37
关于本例:您有一个接口和两个(或更多)实现该接口的类:
interface MyInterface
{
public void someMethod();
}
class MyClass1 implements MyInterface
{
public void someMethod() { System.out.println("foo");}
}
class MyClass2 implements MyInterface
{
public void someMethod() { System.out.println("bar");}
}你可以这样称呼它:
public static void main(String[] args)
{
MyInterface[] array = new MyInterface[2];
array[0] = new MyClass1();
array[1] = new MyClass2();
array[0].someMethod();
array[1].someMethod();
}接口的数组提供了在数组中保存该接口的不同实现的方法
发布于 2017-08-10 18:21:58
让Integer实现Comparable,并不意味着Integer[]实现了Comparable[],所以你不能转换不同类型的数组。但是,您可以将Integer放入Comparable[]数组的元素中。
https://stackoverflow.com/questions/45610915
复制相似问题