繁体   English   中英

java-将非null对象转换为动态对象

[英]java - cast a non-null object to dynamic object

我有这种方法:

 public static Object filterObject(Object object, String objectName){
      ...
 }

这是我的称呼方式:

Entity1 entity1 = new Entity1();
//Call some setters
Test.filterObject(entity1, "Entity1");

我想将Object转换Entity1方法内部的Entity1 我怎样才能做到这一点?

编辑我的问题是如何将object转换为objectName类的实例?

您应该使用泛型。

例如,

public static <T> T filterObject(T object, String objectName) {
  ...
}

Entity1 entity1 = new Entity();
Test.filter(entity1, "Entity1");

通过使用泛型,您不需要强制转换,并且可以避免ClassCastException。 基本上T可以替换为对象的类型。

此外,如果要确保传递的对象是另一种类型的子类,则还可以使用以下内容。

public static <T extends ParentClass> T filterObject(T object, String objectName) {
  ...
}

编辑:如果您不需要不同类型的混合袋,则由于上述原因,应在铸造时使用泛型。 有关是否应使用泛型的详细说明,请参阅此帖子。 https://stackoverflow.com/a/11402351/5085407

如果有可能,您应该传递实际的类对象:

public static <T> T filterObject(Object object, Class<T> desiredClass) {
    return desiredClass.cast(object);
}

如果确实必须传递一个类名,则可以使用Class.forName:

public static Object filterObject(Object object, String className)
throws ClassNotFoundException {
    Class<?> desiredClass = Class.forName(className);
    return desiredClass.cast(object);
}

正如Codebender告诉您的那样,这仅是指定演员表的问题:

public static Object filterObject(Object object, String objectName){
    Entity1 entity1 = (Entity1) object;
    // Your implementation here
    return entity1;
}

另一种方法是使用“泛型”,例如

public static <T extends Entity1> T filterObjectWithGeneric(T object, String objectName) {
    // Your implementation here
    return object;
}

问候。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM