单个方法中的不同对象的Java泛型

时间:2015-02-10 10:38:12

标签: java generics

我有一个必须接受通用对象的Java方法。

public <T> void myMethod(T anyClassObject) {
    //handle code
}

我需要创建一个接受任何类实例的方法。然后我必须将对象保存在数据库中。实际上我必须编写一个应用程序,它将使mongoTemplate API变得更加简单。

在我的应用程序中,用户不需要配置mongoTemplate。这一切都将在我的申请中。用户可以简单地使用我的代码。

因此,为了保存到数据库中,必须像往常一样指定持久化实体类。

例如,

mongoTemplate.createCollection(One.class)

对于其他实体,

mongoTemplate.createCollection(Two.class)

如上所述。

我必须编写一个可以像

那样共同访问的方法
One one = new One();
createTable(one)

 or 

Two two = new Two();
createTable(two)

想用泛型来做。

3 个答案:

答案 0 :(得分:1)

你可以这样做

public <T> void myMethod(T anyClassObject) {

      //whatever you want to do
      if(anyClassObject instanceof ClassA){
           ClassA a=(ClassA)anyClassObject;
           //perform classA specific manipulations you want
      }
      //likewise for all the types you want to handle

}

它将接受任何类型的对象,并为您提供所需的自由。

希望它有所帮助!

祝你好运!

答案 1 :(得分:0)

您可以尝试使用此代码。 你在找别的吗?

//test generic class
public class Test <T> {

public static void main(String[] args) {
    new Test<String>().testMethod("test");;
    new Test<Integer>().testMethod(1);;
    new Test<Long>().testMethod(10L);
}

//test method takes any object
public void testMethod(T obj){
    System.out.println(obj.getClass() + " " +obj);
}
}
}

访问POJO方法

//test method takes any object
    public void testMethod(T obj){
        System.out.println(obj.getClass() + " " +obj);
        if(obj instance of YourPOJO){
           YourPOJO pojo = (YourPOJO )obj;
           System.out.println(pojo.getThing1());
        }
        if(obj instance of YourPOJO1){
           YourPOJO1 pojo1 = (YourPOJO1 )obj;
           System.out.println(pojo1.getThing1());
        }

    }
    }

答案 2 :(得分:0)

泛型方法中Java对象的通用创建可以这样完成:

public class Test {

    public static void main(String[] args) {
        System.out.println(generateAndToString(A.class));
        System.out.println(generateAndToString(B.class));

        accessMemberWithReflection(new A());
        accessMemberWithReflection(new B());
    }

    public static <T> String generateAndToString(Class<T> clazz) {
        System.out.println(clazz.getName());
        try {
            T newInstance = clazz.newInstance();
            return newInstance.toString();
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
        return "Something went wrong";
    }

    public static <T> void accessMemberWithReflection(T object) {
        try {
            Method declaredMethod = object.getClass().getDeclaredMethod("toString");
            String toStringOutput = (String) declaredMethod.invoke(object);
            System.out.println(toStringOutput);
        } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

-

public class A {
      @Override
      public String toString() {
            return "B";
      }
}

-

public class B {
      @Override
      public String toString() {
            return "B";
      }
}

-