2014-11-18 2 views
0

문자열이 인데 클래스 이름 인 사람입니다. 해당 문자열에서 클래스 Person을 얻을 수 있습니까? if의 정적 메소드를 호출하려면 클래스가 필요합니다.클래스 이름에서 클래스를 가져 오는 방법

즉, Class.getName()의 역이 있습니까?

전혀 작동하지 않는다면 알려주세요. 그것은 역시 대답입니다.

+0

당신이 찾고 있던 무슨을의 응답이 있으십시오? –

답변

0

예, 필요한 작업을 수행해야하는 방법은 Class.forName(<String>)입니다. 패키지 이름을 사용하여 정규화 된 클래스 이름을 전달해야한다는 사실을 염두에 두십시오. docs을 참조하십시오.

2

Class.forName 패키지를 포함한 전체 이름으로 작동합니다.

패키지가없는 이름이면 모두 일반적인 방법이 없지만 Grails 도메인 클래스 (또는 다른 Grails 생성물)의 경우에는 look it up via the grailsApplication이 될 수 있습니다.

+0

나는 agrails 환경에서 작업하고 있지만 grailsApplication을 얻을 수 있습니까? – user3647093

+0

나는 grailsApplication을 가져 와서 원하는대로 일반화했다 : 'grailsApplication = new Historie() .domClass.grailsApplication' – user3647093

+0

@ user3647093 컨트롤러는 자동으로 서비스와 도메인을 사용할 수있다. (클래스 수준'def grailsApplication'), 다른 곳에서는'grails.util.Holders'에서 가져올 수 있습니다 –

-1

Class.forName()을 사용하여 클래스를 가져올 수 있습니다. 당신은 당신이 이런 일을 할 수있는 호출 할 메소드의 이름을 알고있는 경우 메소드 이름이 동적 인 경우 코드는 ... 당신에게

def className = 'Person' 
def clz = Class.forName(className) 
clz.someMethod() 

String type ="com.yourPackage.Person"; 
Class<Person> m = (Class<Person>) Class.forName(type); 
+0

왜 그가'newInstance'를 호출 할 것을 제안합니까? –

+0

또한,'newInstance()'의 반환 값에 대한'(Object)'캐스트는 의미가 없습니다. 당신의'destClass' 레퍼런스는'Object'로 선언되었습니다. 'Object' 레퍼런스에 무엇이든 할당 할 수 있습니다. 이 경우 캐스트는 아무 것도하지 않습니다. 변수 destClass의 이름을 지정했다는 사실은 newInstance()가 그 클래스의 인스턴스가 아닌 java.lang.Class 객체를 리턴한다고 생각하는지 궁금합니다. –

2
class Person { 
    static someMethod() { 
     println 'Yep' 
    } 
} 

도움이 될 수 아래 , 당신은 이것 같이 할 수있다 ...

def className = 'Person' 
def methodName = 'someMethod' 
def clz = Class.forName(className) 
clz."$methodName"() 
관련 문제