PHP var_dump와 동등한 Java는 무엇입니까?


127

PHP에는 var_dump () 함수가있어 객체의 내부 내용을 출력하여 객체의 유형과 내용을 보여줍니다.

예를 들면 다음과 같습니다.

class Person {
  private $firstName;
  private $lastName;

  public function __construct($firstName, $lastName) {
    $this->firstName = $firstName;
    $this->lastName = $lastName;
  }
}

$person = new Person('Jon', 'Smith');
var_dump($person);

출력합니다 :

object(Person)#1 (2) {
  ["firstName:private"]=>
  string(3) "Jon"
  ["lastName:private"]=>
  string(5) "Smith"
}

Java에서 동일한 작업을 수행하는 동등한 기능은 무엇입니까?


1
db4o를 사용해 보셨습니까? 특별히이 기능은 아니지만 완벽하게 작동한다고 생각합니다.
물병 자리 힘

답변:


67

Java에서는 그다지 중요하지 않으므로 무료로 얻을 수는 없습니다. 언어 구성이 아닌 관습으로 수행됩니다. 모든 데이터 전송 클래스에서 (그리고 아마도 모든 클래스에서 작성하는 경우에도 ... ) 합리적인 toString방법을 구현해야합니다 . 따라서 여기 toString()에서Person 클래스 하고 원하는 상태를 반환해야합니다.

좋은 toString 메소드 작성에 도움 이되는 유틸리티 가 있거나 대부분의 IDE에 자동 toString()작성 단축키가 있습니다.



Guava 대안 및 Intellij IDEA 템플릿에 대해서는 stackoverflow.com/questions/9444573/… 도 참조하십시오 .
Vadzim

31

필자의 경험에 따르면 var_dump는 일반적으로 step-though 디버거 대신 PHP를 디버깅하는 데 사용됩니다. Java에서는 물론 IDE의 디버거를 사용하여 객체 내용의 시각적 표현을 볼 수 있습니다.


10
ps, 대부분의 PHP 또는 웹 개발자는 디버깅을 잊어 버립니다. 브라우저에서 디버그 결과를 보는 것을 선호하기 때문입니다.
GusDeCooL

10
예를 들어 Adobe Experience Manager의 브라우저 기반 편집기에서 JSP 코드를 프로그래밍하는 경우 IDE의 디버거를 사용할 수 없습니다. :(
Trevor

vardump를 html 형식으로 인쇄하여 라이브 환경에서 프로그램의 동작을 테스트하는 데 사용할 수 있습니다.
omjego

18

대안은 toString()객체 의 메서드 를 재정 의하여 원하는 방식으로 내용을 출력하거나 리플렉션을 사용하여 객체를 검사하는 것입니다 (디버거와 비슷한 방식).

리플렉션을 사용하면 개별 객체를 "분석 가능"하도록 수정할 필요가 없지만 복잡성이 추가되고 중첩 된 객체 지원이 필요한 경우이를 작성해야합니다.

이 코드는 Object"o"에 대한 필드와 값을 나열합니다.

Field[] fields = o.getClass().getDeclaredFields();
for (int i=0; i<fields.length; i++)
{
    System.out.println(fields[i].getName() + " - " + fields[i].get(o));
}

사용중인 필드는 어디에서 가져 왔습니까?
RMiranda

3
java.lang.reflect.Field
Harry Lime

17

가장 좋은 방법은 google-gson (JSON을 Java 객체로 변환하거나 그 반대로 변환하는 Java 라이브러리)을 사용하는 것입니다.

다운로드 하여 "jar"파일을 프로젝트에 추가하십시오.

HashMap<String, String> map = new HashMap<String, String>();

map.put("key_1", "Baku");
map.put("key_2", "Azerbaijan");
map.put("key_3", "Ali Mamedov");

Gson gson = new Gson();

System.out.println(gson.toJson(map));

산출:

{"key_3":"Ali Mamedov","key_2":"Azerbaijan","key_1":"Baku"}

모든 객체 (배열, 목록 등)를 JSON으로 변환 할 수 있습니다. PHP의 var_dump () 의 최고의 아날로그라고 생각합니다.


4
흥미 롭다 ... 왜 정적 메소드가 아닌지 아십니까?
mirelon

2
정적 변수처럼 새 변수를 만들지 않고 new Gson (). toJson (...)처럼 사용할 수 있습니다.
Ali Mamedov

Imo, 직접 사용하지 않고 사용자 정의 유틸리티 클래스로 추상화하는 것이 좋습니다. 이는 타사 종속성을 관리 할 수있는 유연성을 제공합니다.
MAYOBYO HASSAN



4

나는 이미 내가 작업중 인 프로젝트 유형에 의존하기 때문에 GSON을 사용하고 싶다.

public static String getDump(Object o) {
    return new GsonBuilder().setPrettyPrinting().create().toJson(o);
}

또는 사용하는 다른 JSON 라이브러리 대신 GSON을 사용하십시오.



0

XML 직렬화를 사용하면 깊이 중첩 된 객체라도 매우 깔끔하게 표현할 수 있습니다.


0

나는 당신이 할 수있는 비슷한 것이 당신이보고 싶은 객체를 인쇄하는 간단한 방법을 만드는 것이라고 생각합니다. 이 같은:

public static void dd(Object obj) { System.out.println(obj); }

var_dump ()와 같지는 않지만 디버거 IDE로 이동할 필요없이 일반적인 아이디어를 얻을 수 있습니다.


0

필드 솔루션 (setAccessible)에 추가하여 오브젝트의 개인 변수에 액세스 할 수 있습니다.

public static void dd(Object obj) throws IllegalArgumentException, IllegalAccessException {
    Field[] fields = obj.getClass().getDeclaredFields();
    for (int i=0; i<fields.length; i++)
    {
        fields[i].setAccessible(true);
        System.out.println(fields[i].getName() + " - " + fields[i].get(obj));
    } 

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.