相关疑难解决方法(0)

在Threads之间传递对象时是否可以使用instanceof?

我遇到了一个问题,其中instanceof工作,然后它没有.进入细节很困难,但我认为这可能是问题所在:

阅读本文:http://www.theserverside.com/news/thread.tss? thread_id = 40229(搜索Thread.currentThread),似乎暗示即使两个对象是同一个类,如果你传递它们在具有不同类加载器的线程之间,instanceof(和isAssignableFrom)可能仍会失败.

这当然可以解释我的行为,但我想知道是否有人可以验证它?

(我希望在讨论开始时链接的文章仍然可用,但它似乎不是.)

java multithreading instanceof classloader

14
推荐指数
1
解决办法
5731
查看次数

java:用==或.equals()比较类:有区别吗?

可能重复:
Java是否保证Object.getClass()== Object.getClass()?

我知道你应该equals()在一般情况下使用,但是有两种Class<?>物体可以平等equals()但不相同==吗?

编辑:我特意想知道是否存在两个类对象

Class<?> cl1 = ...
Class<?> cl2 = ...
cl1.equals(cl2)    ->  true
cl1 == cl2         ->  false
Run Code Online (Sandbox Code Playgroud)

这似乎没有被可能的重复问题所涵盖.(这是密切相关的)

也可能不是真的,类对象是通过someObject.getClass()- 它可能是一个是Class.forName(...)一些反射行为的结果,而另一个是Method.getReturnType().

java equality class

9
推荐指数
1
解决办法
1万
查看次数

Java如何反序列化Class对象,同时保留它们与当前加载的Class对象的身份?

如果我序列化一个Class对象(例如HashMap.class),然后在另一个JVM实例中反序列化它,那么反序列化的类与当前加载的类相同:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;

final class DeserializationTest {

    static String path = "/home/suseika/test.ser";
    static Class<HashMap> cls = HashMap.class;

    public static void main(String[] args) throws Exception {
        if (args[0].equals("serialize")) {
            serialize();
        } else if (args[0].equals("deserialize")) {
            final Object deserialized = deserialize();

            // The important line, prints "true"
            System.out.println(deserialized == cls); 
        }
    }

    static Object deserialize() throws Exception {
        ObjectInputStream in = new ObjectInputStream(new FileInputStream(path));
        return in.readObject();
    }

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

java serialization classloader

7
推荐指数
1
解决办法
1391
查看次数

可以在java中将java.lang.Class对象与==进行比较吗?

可能重复:
Java是否保证Object.getClass()== Object.getClass()?

如果我有一个类如

Class<? extends MyObject> aClass = ...;
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

if (aClass == MySubObject.class) { ... }
Run Code Online (Sandbox Code Playgroud)

或者我必须这样做

if (aClass.equals(MySubObject.class)) { ... }
Run Code Online (Sandbox Code Playgroud)

此外,进一步知道答案,我很想知道一个参考,即这是什么定义.

==如果可能,我更喜欢使用,因为我发现它更具可读性和更快.(显然它不是那么可读,或者更快,但是,如果有更简单的解决方案,为什么还要使用更复杂的解决方案.)

java

6
推荐指数
2
解决办法
4824
查看次数

Java是否保证getClass()返回的Class对象始终是同一个实例?

可能重复:
Java是否保证Object.getClass()== Object.getClass()?

我注意到Eclipse生成以下代码equals:

public class MyClass {

    public boolean equals(Object obj) {
        if (this == obj)
            return true;

        if (obj == null)
            return false;

        if (getClass() != obj.getClass())
            return false;

        MyClass other = (MyClass) obj;

        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

特别感兴趣的是这段代码:

if (getClass() != obj.getClass())
    return false;
Run Code Online (Sandbox Code Playgroud)

该代码假定Class返回的对象getClass()将是同一类的所有对象的相同实例(不仅仅是等效实例).也就是说,他们认为没有必要像这样写:

if (getClass().equals(obj.getClass()))
    return false;
Run Code Online (Sandbox Code Playgroud)

Java是否正式记录了该getClass()方法的这种行为?

java equality instance

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

Java Class 对象是唯一的/单例的吗?

类对象是否保证在 JVM 中是唯一的,它们是单例吗?即会

getClass() == getClass()
Run Code Online (Sandbox Code Playgroud)

总是成立并且是

a == b
Run Code Online (Sandbox Code Playgroud)

当且仅当为真

a.equals(b)
Run Code Online (Sandbox Code Playgroud)

其中 a 和 b 是类型Class<?>

java singleton class

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