相关疑难解决方法(0)

如何获取父基类对象super.getClass()

我有一点Java问题(作为一名C++程序员).

我有2个相关的课程:

public class Patient() {
...
}

public class PatientPersistent extends Patient {
...
    public void foo() {
    System.out.println(super.getClass().toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

这将输出:

class org.example.smartgwt.server.model.PatientPersistent

有没有办法获得父类类型?即

class org.example.smartgwt.server.model.Patient.

这将允许我概括一些我需要在每个孩子中实施的方法,这些方法很糟糕.

谢谢!


UPDATE

我正在使用Dozer将我的域Hibernate对象转换为Serializable版本.我不希望客户知道这一点,因此客户只能看到Patient类.在服务器端,我执行转换.

public class DataObject<Type> {

    private static final Class<Object> DstType = Type;

    public Object convert(Object srcData, final BeanFactory factory) {
        Mapper mapper = (Mapper)factory.getBean("dozerMapper");

        return (Object)mapper.map(srcData, DstType);
    }
}

public class Patient() implements Serializable {
    public Set foo;
}    

public class PatientPersistent extends Patient {

    public org.hibernate.collection.PersistentSet …
Run Code Online (Sandbox Code Playgroud)

java class dozer

17
推荐指数
3
解决办法
5万
查看次数

使用.getClass()被认为是一个糟糕的设计?

我目前正在实现一个函数,使用超类作为参数.

例如:

private void foo(Parent parent) {
    if(parent.getClass() == Child1.class) {
        Child1 c1 = (Child1) parent;
        System.out.println(c1.getChild1Attribute());
    }
    else if(parent.getClass() == Child2.class) {
        Child2 c2 = (Child2) parent;
        System.out.println(c1.getChild2Attribute());
    }
    else if(parent.getClass() == Parent.class) {
        System.out.println(parent.getParentAttribute());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个坏主意吗?

我在这里读到了一些线索,说使用getClass()或是instanceof不好的设计:

java oop

4
推荐指数
2
解决办法
661
查看次数

标签 统计

java ×2

class ×1

dozer ×1

oop ×1