相关疑难解决方法(0)

在Java中向下倾斜

Java中允许向上转换,但是向下转换会产生编译错误.

可以通过添加强制转换来删除编译错误,但无论如何都会在运行时中断.

在这种情况下,为什么Java允许向下转换,如果它不能在运行时执行?
这个概念有什么实际用途吗?

public class demo {
  public static void main(String a[]) {
      B b = (B) new A(); // compiles with the cast, 
                         // but runtime exception - java.lang.ClassCastException
  }
}

class A {
  public void draw() {
    System.out.println("1");
  }

  public void draw1() {
    System.out.println("2");
  }
}

class B extends A {
  public void draw() {
    System.out.println("3");
  }
  public void draw2() {
    System.out.println("4");
  }
}
Run Code Online (Sandbox Code Playgroud)

java casting

174
推荐指数
4
解决办法
19万
查看次数

关于在Java中创建泛型列表数组的错误

第一个代码

List<Integer>[] array = (List<Integer>[]) new Object[size]; 
Run Code Online (Sandbox Code Playgroud)

它将给出以下异常:

java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.util.List; ([Ljava.lang.Object; and [Ljava.util.List; are in module java.base of loader 'bootstrap')

为什么会这样呢?我只是按照有效Java第三版 132页的方法进行操作:

第二码

E[] array = (E[]) new Object[size];
Run Code Online (Sandbox Code Playgroud)

但是我发现以下代码有效

第三码

List<Integer>[] array = (List<Integer>[]) new List[size];
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 为什么第一个代码是错误的,但是在有效Java中建议使用第二个代码?我有误会吗?

例如:为什么以下代码运行良好,但是第一个代码错误?

public class Test<E>{
    E[] array;
    public Test(){
        array = (E[]) new Object[10];
    }
    public E set(E x){
        array[0] = x;
        System.out.println(array[0]);
        return array[0];
    }

    public static void …
Run Code Online (Sandbox Code Playgroud)

java arrays generics syntax

12
推荐指数
1
解决办法
493
查看次数

在 swift 中将父实例传递给子类型变量

我想将父类的实例传递给其类型是该父类的子类的变量。

有如下两个类:

class Parent{
    var aaa:String?
    var bbb:String?
    init(pa:String?,pb:String?){
        self.aaa=pa
        self.bbb=pb
    }
}

class Child:Parent{
    var ccc:String?
}
Run Code Online (Sandbox Code Playgroud)

现在,我这样使用它们:

let p=Parent(a:"1111",b:"22222")
if let c=p as? Child{
   print(c)
}
Run Code Online (Sandbox Code Playgroud)

但在任何情况下该变量都是零。

我想得到如下结果:c.aaa="1111" c.bbb="222" c.ccc=nil或其他

swift

5
推荐指数
1
解决办法
5391
查看次数

Java相等日期不相等

我刚刚遇到了一个非常奇怪的行为。我想比较2个使用完全相同的日期d1.equals(d2);,但结果是错误的。

调试时,我发现两个日期的“快速时间”为1531951200000。之后,我将检查更改为d1.getTime() == d2.getTime()并得到了相等的结果。

我还检查equals()的方法,java.util.Date这确实几乎完全一样

public boolean equals(Object obj) {
    return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
Run Code Online (Sandbox Code Playgroud)

请注意,这两个对象都是类型java.util.Date这就排除了,有可能是一个区别,即java.util.DateVS java.sql.Date。还要注意,其中一个值是从数据库中读取的,而另一个是从文件中读取的。这两个值都设置为带有java.util.Date字段的同一类的不同实例。

有人对此有解释吗?还是我只是想念一些东西?

java date equals

5
推荐指数
0
解决办法
163
查看次数

从超类创建一个子类

让我们说:

class A {
    public int fieldA = 0;
}

class B extends A {
    public int fieldB = 0; 
}
Run Code Online (Sandbox Code Playgroud)

现在,我想从A创建一个B实例:

A a = new A();
B b = (B) new A();
Run Code Online (Sandbox Code Playgroud)

这给出了classCastException.我可以在B中创建一个带有A实例和复制字段的costructor,但它显然是非实际的:

class B extends A {
    public int fieldB = 0; 

    B (A a){
        fieldA = a.fieldA;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

java inheritance

4
推荐指数
1
解决办法
404
查看次数

ArrayList无法强制转换为自定义类扩展ArrayList

我有下面提到的课程:

public class JsonHistoryList extends ArrayList<JsonHistory> implements Serializable{}
Run Code Online (Sandbox Code Playgroud)

我希望通过意图使用它

timerService.putExtra(TimerService.ACTIVITY_LIST_ARG, activities);
Run Code Online (Sandbox Code Playgroud)

但在我收到它之后(下面的方式)

JsonHistoryList temp = (JsonHistoryList) intent.getSerializableExtra(TimerService.ACTIVITY_LIST_ARG);
Run Code Online (Sandbox Code Playgroud)

在我的服务中它给了我例外:

Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.epstim.captime.jsonmodel.JsonHistoryList
Run Code Online (Sandbox Code Playgroud)

我不明白为什么java无法处理该操作.

我已将服务代码更改为:

ArrayList<JsonHistory> temp = (ArrayList<JsonHistory>) intent.getSerializableExtra(TimerService.ACTIVITY_LIST_ARG);
activities.addAll(temp);
Run Code Online (Sandbox Code Playgroud)

它奏效了.

java android arraylist serializable android-intent

4
推荐指数
1
解决办法
2025
查看次数

对象之间的类层次结构和转换

据我所知,不可能将超类的Object转换为子类的Object.这将编译但在运行时它将返回错误.

更具体地说,给定以下层次的类和接口:

.Alpha是Beta和Gamma的超类
.Gamma是Delta和Omega的超级课程
.接口"In"由Beta和Delta实现

在这种情况下,我定义以下代码:

Delta r;
Gamma q;
Run Code Online (Sandbox Code Playgroud)

它是否正确?

r = (Delta) q;
Run Code Online (Sandbox Code Playgroud)

即使Delta是Gamma的子类,我可以将q转换为Delta吗?我认为这是不可能的,我的教科书另有说法.我已经搜索了很多,根据这个我是对的,这是教科书中的一个错误.

我错过了什么吗?

java casting

3
推荐指数
1
解决办法
927
查看次数