수업에서 정적 메소드를 호출합니까?
-
09-09-2019 - |
문제
정적 메소드가있는 분형이있는 클래스 객체에 대한 참조가 있습니다. 먼저 Somebeype를 인스턴스화하지 않고 해당 메소드를 호출하는 방법이 있습니까? 바람직하게는 강력한 타이핑을 피하는 것이 아닙니다.
편집 : 알겠습니다.
interface Int{
void someMethod();
}
class ImplOne implements Int{
public void someMethod() {
// do something
}
}
Class<? extends Int> getInt(){
return ImplOne.class;
}
이 경우 Somemethod ()는 어쨌든 정적이 될 수 없습니다.
해결책
정의에 따라 정적 방법은 해당 클래스의 인스턴스가 아닌 클래스에서 호출됩니다.
따라서 사용하는 경우 :
SomeClass.someStaticMethod()
당신은 아무것도 인스턴스화하지 않습니다 (클래스 로딩과 인스턴스화를 제쳐두고 SomeClass
JVM이 처리하고 범위를 벗어난 클래스 자체.
이것은 이미 인스턴스화 된 객체를 호출하는 일반 방법에 반대합니다.
SomeObject o = someObject; // had to be instantiated *somewhere*
o.someMethod();
다른 팁
상황이 정확히 무엇인지 확실하지 않지만 클래스 유형을 모르고 클래스에서 정적 메소드를 실행하려는 경우 (예 : 일부 유형이라는 것을 알지 못합니다. 반사를 사용할 수있는 메소드의 이름과 매개 변수를 알고 다음을 수행하십시오.
Class c = getThisClassObjectFromSomewhere();
//myStaticMethod takes a Double and String as an argument
Method m = c.getMethod("myStaticMethod", Double.class, String.class);
Object result = m.invoke(null, 1.5, "foo");
클래스 객체에 대해 이야기하기 때문에 Java 반사에 관심이 있다고 가정합니다. 다음은 당신이하려는 일을하는 간단한 스 니펫입니다.
Class someClass = SomeType.class;
Method staticMethod = someClass.getMethod( "methodName", ... );
// pass the first arg as null to invoke a static method
staticMethod.invoke( null, ... );
예. 그것이 정적 방법에 관한 것입니다. 그냥 전화 해. tomeType.yourstaticMethodhere ().
제휴하지 않습니다 StackOverflow