저는 파이썬 코드를 자바로 변환하고 있으며 객체의 메소드를 호출해야하지만 런타임까지는 어떤 메소드를 모르는 상황이 있습니다. 파이썬에서는 getattr을 내 객체에 사용하고 내 메소드의 이름 인 문자열을 전달하여이 문제를 해결합니다. 자바에서 비슷한 것을 어떻게 할 것입니까?python의 getattr에 해당하는 Java?
8
A
답변
11
Class.getField
은 (는) 친구입니다. 파이썬이 동적으로 타입이 지정되고 자바가 정적으로 타입이 지정 되었기 때문에 (필드의 타입을 미리 알지 못한다면) 그리 쉽지는 않을 것입니다.
편집 :이 예제를 번역하는 방법. http://effbot.org/zone/python-getattr.htm
속성 조회
파이썬
//normal
value = obj.attribute
//runtime
value = getattr(obj, "attribute")
자바
//normal
value = obj.attribute;
//runtime
value = obj.getClass().getField("attribute").get(obj);
메소드 호출
파이썬은
//normal
result = obj.method(args)
//runtime
func = getattr(obj, "method")
result = func(args)
자바 간단한 경우
//normal
result = obj.method(args);
//runtime
Method func = obj.getClass().getMethod("method", Object[].class);
result = func.invoke(obj, args);
, 당신은 당신이 필드 또는 방법이 있는지 알고 있어야합니다. 그들은 같은 이름을 가질 수 있습니다. 또한 메서드가 오버로드 될 수 있으므로 원하는 메서드 서명을 알아야합니다.
당신이 얻는 방법이나 필드를 신경 쓰지 않는다면 이것을 쉽게 도우미 메서드로 구현할 수 있습니다.
0
Java Reflection에 대해 알아 보려면 here을 시작할 수 있습니다.
0
java reflection을 사용할 수 있지만 정확히 getattr
에 해당하는 것은 없습니다.
0
자바에서는 Reflection API를 사용하여이 작업을 수행합니다 (일반적으로 꽤 복잡합니다).
MethodUtils
아파치 코 몬즈 BeanUtils 프로젝트에서는 약간의 작업이 더 쉬울 수도 있지만, 이와 같은 간단한 일에 상당히 의존적입니다.
0
Reflection API을 사용해야합니다. 순수한 API는 조금만 ... 접근 할 수 없기 때문에 commons beanutils 또는 reflections과 같은 도우미를 살펴 봐야합니다.
관련 문제
- 1. Python의 Java Mahout에 해당하는 것
- 2. Python의 "construct"라이브러리에 해당하는 Java
- 3. python의 문자열 lstrip()에 해당하는 Java?
- 4. Python 사전에 해당하는 Java
- 5. Python의 로그 라이브러리에 해당하는 C++
- 6. Python의 urllib.quote_plus에 해당하는 Ruby/Rails는 무엇입니까?
- 7. Java 자원에 해당하는 C#
- 8. echcache.xml에 해당하는 Java 구성
- 9. Java XDoclet에 해당하는 C++ 도구
- 10. .NET의 System.Xml.Schema 클래스에 해당하는 Java?
- 11. PHP의 mysql_real_escape_string()에 해당하는 Java
- 12. C# Java IdentityHashMap에 해당하는 것
- 13. 파이썬 repr()에 해당하는 Java?
- 14. Java Reader 클래스에 해당하는 코코아
- 15. 자바 스크립트 객체에 대해 python의 __name__에 해당하는 것이 있습니까?
- 16. Python의 PHP call_user_func_array
- 17. Python의 zlib.compress와 Java (Android)의 Deflater.deflate는 호환됩니까?
- 18. Python 기능에 해당하는 Java -> set (string)
- 19. InterruptedException (Java)에 해당하는 .NET은 무엇입니까?
- 20. Ruby에서 Java CLASSPATH에 해당하는 것은 무엇입니까?
- 21. Ruby에 해당하는 Java .properties 파일은 무엇입니까?
- 22. Java Collections Framework에 해당하는 Python은 무엇입니까?
- 23. Visual Studio에서 Java System.out에 해당하는 언어
- 24. Java Servlet Filter에 해당하는 PHP는 무엇입니까?
- 25. ASP.NET Http 모듈에 해당하는 Java 란 무엇입니까?
- 26. Objective-C에 해당하는 Java Math 라이브러리는 무엇입니까?
- 27. 유닉스에서 file 명령에 해당하는 java 라이브러리가 있습니까?
- 28. Fortran 프로그램에 해당하는 Java 코드 작성
- 29. Java 용 boost :: multi_index에 해당하는 부분이 있습니까?
- 30. Clojure는 Python의 lxml 라이브러리와 동일합니까?
Field.get()은 모든 데이터 유형의 Object를 반환합니다. 그것은 정적으로 점검되지 않았습니다. –
@Peter :'getattr'와 동일합니다. Python 개발자는 알 수없는 것을 두려워하지 않습니다. –
@Peter 요점은 무엇인지 모르겠습니다. 파이썬에서는'getattr (obj, field ") * 2'을 할 수 있으며 int, float, strings, lists 등에서 작동합니다. – NPE