#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 для получения имени класса