문자열이 인데 클래스 이름 인 사람입니다. 해당 문자열에서 클래스 Person
을 얻을 수 있습니까? if의 정적 메소드를 호출하려면 클래스가 필요합니다.클래스 이름에서 클래스를 가져 오는 방법
즉, Class.getName()
의 역이 있습니까?
전혀 작동하지 않는다면 알려주세요. 그것은 역시 대답입니다.
문자열이 인데 클래스 이름 인 사람입니다. 해당 문자열에서 클래스 Person
을 얻을 수 있습니까? if의 정적 메소드를 호출하려면 클래스가 필요합니다.클래스 이름에서 클래스를 가져 오는 방법
즉, Class.getName()
의 역이 있습니까?
전혀 작동하지 않는다면 알려주세요. 그것은 역시 대답입니다.
예, 필요한 작업을 수행해야하는 방법은 Class.forName(<String>)
입니다. 패키지 이름을 사용하여 정규화 된 클래스 이름을 전달해야한다는 사실을 염두에 두십시오. docs을 참조하십시오.
Class.forName
패키지를 포함한 전체 이름으로 작동합니다.
패키지가없는 이름이면 모두 일반적인 방법이 없지만 Grails 도메인 클래스 (또는 다른 Grails 생성물)의 경우에는 look it up via the grailsApplication
이 될 수 있습니다.
나는 agrails 환경에서 작업하고 있지만 grailsApplication을 얻을 수 있습니까? – user3647093
나는 grailsApplication을 가져 와서 원하는대로 일반화했다 : 'grailsApplication = new Historie() .domClass.grailsApplication' – user3647093
@ user3647093 컨트롤러는 자동으로 서비스와 도메인을 사용할 수있다. (클래스 수준'def grailsApplication'), 다른 곳에서는'grails.util.Holders'에서 가져올 수 있습니다 –
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);
왜 그가'newInstance'를 호출 할 것을 제안합니까? –
또한,'newInstance()'의 반환 값에 대한'(Object)'캐스트는 의미가 없습니다. 당신의'destClass' 레퍼런스는'Object'로 선언되었습니다. 'Object' 레퍼런스에 무엇이든 할당 할 수 있습니다. 이 경우 캐스트는 아무 것도하지 않습니다. 변수 destClass의 이름을 지정했다는 사실은 newInstance()가 그 클래스의 인스턴스가 아닌 java.lang.Class 객체를 리턴한다고 생각하는지 궁금합니다. –
class Person {
static someMethod() {
println 'Yep'
}
}
도움이 될 수 아래 , 당신은 이것 같이 할 수있다 ...
def className = 'Person'
def methodName = 'someMethod'
def clz = Class.forName(className)
clz."$methodName"()
당신이 찾고 있던 무슨을의 응답이 있으십시오? –