Метод, который получает объект, превращает его в существующий pojo

#java #spring #methods #casting #pojo

#java #spring #методы #Кастинг #pojo

Вопрос:

Итак, у меня есть pojo, подобный этому:

 public class pojo {
   String name;
   String address;
   String email;

   // getter's and setter's here...
}
  

И с помощью одного метода, который получает объект типа, как мне превратить его в исходный тип, чтобы я мог использовать все средства получения и установки.

 private void method(Object obj) {
   // use get's and set's from the original object of type "pojo"
   // instead of the methods from java.lang.Object
}

  

Я действительно не знаю, как объяснить это лучше, это немного смущает меня. Желаю, чтобы вы все поняли.
Заранее спасибо

РЕДАКТИРОВАТЬ 1
Итак, я не очень хорошо объяснил это, потому что я немного запутался, и я даже не знаю, возможно ли то, что я хочу сделать. Но внутри метода я хочу как-то сделать что-то вроде этого:

 public void method(Object obj) {

   **Dynamically detect obj type** newObj = (obj type) obj;

   // I want to do like this, because this method will never know what 
   // object type I am passing.
   // I will have more than 10 pojo's and I wanted the method to detect
   // and create them dynamically.
}
  

Комментарии:

1. Как выглядит «obj»?

2. Это просто java.lang. Объект @PhilippWilhelm. Я пытаюсь сделать этот метод динамическим, поэтому не имеет значения тип объекта, который он получает, он всегда будет использовать существующие методы получения и настройки из pojo,

3. И чего вы хотите достичь с помощью такого метода? Как бы вы вызвали методы, если вы не знаете тип объекта?

4. @M.Deinum Потому что у меня есть метод, который создает оболочку SOAP, и я не хочу создавать SOAPBody для каждого типа объекта, который у меня есть. Потому что, если у меня будет более 100 pojo, мне нужно будет повторить этот метод 100 .

5. И почему вы просто не используете Spring WS для отправки / создания конверта? Почему вы вообще это делаете сами?

Ответ №1:

вы можете использовать приведение

здесь мы создаем объект Pojo в пустом конструкторе, затем отправляем его как объект в метод

 public static void main(String[] args) {
        
        Pojo pojo=new Pojo();
        pojo.method(pojo);
        System.out.println(pojo.getName());

    }
  

наш метод берет obj, который является общим объектом Java, и преобразует его как объект Pojo в test, который уже является объектом Pojo (мы делаем это, чтобы мы могли использовать методы класса Pojo).
затем мы устанавливаем, что это имя.

 public class Pojo {
    
    private String name;
    private String address;
    private String email;
    
    public Pojo(){}
     
     public Pojo(String name,String address,String email)
     {
       this.name=name;
       this.address=address;
       this.email=email;
           
     }
     
     
     
     public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public void method(Object obj) {
        Pojo test = (Pojo)obj;
        test.setName("avi");
     }
}
  

Комментарии:

1. Извините, но это не совсем то, что я искал, я отредактировал вопрос, чтобы лучше объяснить себя.

Ответ №2:

Протестируйте с instanceof перед отливкой.

Pojo pojo = obj экземпляр Pojo? (Pojo) pojo: новый Pojo();

Комментарии:

1. Извините, но это не совсем то, что я искал, я отредактировал вопрос, чтобы лучше объяснить себя.

Ответ №3:

Попробуйте com.fasterxml.jackson.databind.ObjectMapper .

Pojo pojo = new ObjectMapper().readValue(object, Pojo.class)

Это преобразует ваш объект в тип pojo, и, следовательно, все ваши методы в Pojo могут быть доступны.

Комментарии:

1. Извините, но это не совсем то, что я искал, я отредактировал вопрос, чтобы лучше объяснить себя.

Ответ №4:

Вы можете просто проверить с помощью instanceof operator, чтобы определить тип объекта.

если вы намерены создать объект динамически, перейдите к размышлению, чтобы создать объект.

 public void method(Object obj) throws Exception {

    Class<?> clz = obj.getClass();
    Object newObj = clz.newInstance();

    **Dynamically detect obj type** newObj = (obj type) obj;

    // I want to do like this, because this method will never know what 
    // object type I am passing.
    // I will have more than 10 pojo's and I wanted the method to detect
    // and create them dynamically.
}
  

поскольку возвращаемый тип метода — void, вы должны выполнить свою бизнес-логику внутри этого метода, в зависимости от другого типа объекта, вам необходимо применить бизнес-логику. затем явно проверьте тип объекта, чтобы выполнить вашу задачу в блоке if.

Ответ №5:

Вы должны использовать приведение.

 private void method(Object obj) {
   Pojo p = (Pojo) obj;
  
   //Now you can use the pojo methods.
   p.getName(); //And other methods depending on what methods you have defined in Pojo
}
  

РЕДАКТИРОВАТЬ: Или вы можете использовать Java reflection API, чтобы получить имя класса, а затем использовать соответствующее приведение.

Чтобы получить имя класса, используйте это: Class c = obj.getClass()

Затем вы можете использовать switch case, чтобы затем использовать соответствующее приведение.

Комментарии:

1. Извините, но это не совсем то, что я искал, я отредактировал вопрос, чтобы лучше объяснить себя.

2. Я отредактировал свой ответ, чтобы включить информацию об использовании Java Reflection API для получения имени класса