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

时间:2015-08-08 06:04:28

标签: java

我有这个方法:

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

以下是我如何称呼它:

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

我想将Object转换为该方法内的Entity1。我怎么能这样做?

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

3 个答案:

答案 0 :(得分:3)

你应该使用泛型。

例如,

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

答案 1 :(得分:1)

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

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);
}

答案 2 :(得分:0)

正如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;
}

问候。