如何使用 Java 将具有相同状态的多个对象发送到具有单个对象参数的方法?

How to send multiple objects with same state to a method with single Object parameter using Java?

Java 版本:1.6

我有多个结构相似的bean

ClassBean1 {
   String firstName;
   String middleName;
   String lastName;
}



UtilClass {

   public static void concatName(ClassBean1 object) {
        String fullName =  object.firstName + object.middleName + object.lastName;
        System.out.println(fullName); 
   }

}

Mainclass {
   UtilClass.concatName(newClassBean1)
}

现在我又得到一个与 ClassBean1 具有相同结构的 bean class;说 ClassBean2

ClassBean2 {
   String firstName;
   String middleName;
   String lastName;
}

我想修改 UtilClass.concatName 以使其适用于具有 firstName、middleName 和 lastName 的所有对象。我做了以下更改:

UtilClass {

   public static void concatName(Object object) {
        String fullName =  object.firstName + object.middleName + object.lastName;
        System.out.println(fullName); 
   }

}

但是它给出了编译时错误。 请问哪位大侠帮忙解决!!!

我无法触及现有的 bean,即 ClassBean1。所以新代码我可以注意创建基础 class 和派生 fundaa;但重构它,以便现有代码应该工作

您需要创建一个基础 class,其中包含您希望派生所有其他 class 的成员和方法,在您的基础 class 中定义名称成员和concatName 方法,那么从该方法派生的每个对象都将继承成员和函数,并且它将起作用。

用这三个变量创建父级 class,继承其他 classes,它们将使用父级 class 中的这 3 个,而不是:

public static void concatName(Parent object) {
    String fullName =  object.firstName + object.middleName + object.lastName;
    System.out.println(fullName); 

}

如果你真的想在不创建基础的情况下做到这一点 class,我能想到的唯一方法就是反思。那个,你可以有一个对象作为方法参数。然后,在你的方法中,你可以使用反射来查看是否所有需要的方法都存在并调用它们来获取数据。

但这非常丑陋,不应尝试。如前所述,最好的方法是基础 class 或通用接口。

您可以使用instanceof

进行检查
public static void concatName(Object object) {

      if(object instanceof ClassBean1){
            ClassBean1 b1 = (ClassBean1) object;
            String fullName = b1.firstName +b1.middleName + b1.lastName;
            System.out.println(fullName);
      } else if(object instanceof ClassBean2){
            ClassBean2 b2 = (ClassBean2) object;
            String fullName = b2.firstName +b2.middleName + b2.lastName;
            System.out.println(fullName);
      }

}

您可以在 Util class 中有一个方法,它将接受三个参数并从 main class 调用该方法。

UtilClass {

public static void concatName(String firstName, String middleName, String lastName) { String fullName = firstName + middleName + lastName; System.out.println(全名); }

}

主要class { UtilClass.concatName(newClassBean1.getFirstName() + newClassBean1.getMiddleName() + newClassBean1.getLastName()) //第二个class UtilClass.concatName(newClassBean2.getFirstName() + newClassBean2.getMiddleName() + newClassBean2.getLastName()) }

您可以使用反射来获取 class fields/variables。

传递具有公共状态的任何类型的 bean,即您要在 UtilClass 函数中使用的公共变量,并使用每个对象的基础 class,即 Object class 作为参数对于相同的方法。现在从该变量中提取 class 对象并使用反射方法获取变量值。

public static void concatName(Object object) {

    // 
    Class clazz = object.getClass();

    String fullName = null;
    try {
        fullName =  clazz.getDeclaredField("firstName").get(object) +" "+ clazz.getDeclaredField("middleName").get(object) + " " +clazz.getDeclaredField("lastName").get(object);
    } catch (IllegalArgumentException | IllegalAccessException
            | NoSuchFieldException | SecurityException e) {
    }

    System.out.println(fullName);


}

使用这种方法,您无需 polymorphism/inheritance 或更改 bean classes 即可获得所需的结果。