문제

정적 메소드가있는 분형이있는 클래스 객체에 대한 참조가 있습니다. 먼저 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 ().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top