2014-03-29 2 views
0

컴파일 오류가 발생합니다. 내 정적 메서드를 생성하고 여기에 Event<T> 개체를 반환하는 공장 반환 싶습니다. 이 문제를 어떻게 해결할 수 있습니까?일반 정적 팩터

import com.lmax.disruptor.EventFactory; 

public final class Event<T> { 

    private T event; 

    public T getEvent() { 

     return event; 
    } 

    public void setEvent(final T event) { 

     this.event = event; 
    } 

    public final static EventFactory<Event<T>> EVENT_FACTORY = new EventFactory<Event<T>>() { 

     public Event<T> newInstance() { 

      return new Event<T>(); 
     } 


    }; 

} 
+0

정적 메서드가 표시되지 않습니다 ... –

+0

그래서 ... 'EventFactory'는 무엇입니까? 그것은 정의되기 전에 하나를 사용하려는 것 같습니다 ... – Makoto

+2

컴파일 오류를 게시하면 도움이 될 수도 있습니다 – bsd

답변

3

정적 멤버에는 클래스의 일반 매개 변수가 적용되지 않습니다.

명백한 해결책은 변수가 아닌 방법을 사용하는 것입니다.

public static <U> EventFactory<Event<U>> factory() { 
    return new EventFactory<Event<U>>() { 
     public Event<U> newInstance() { 
      return new Event<U>(); 
     } 
    }; 
} 

구문은 현재 Java 버전에서보다 간결합니다.

정적 필드에 동일한 EventFactory 인스턴스를 저장할 수는 있지만 안전하지 않은 캐스팅이 필요합니다.

+0

오! 너는 너무 빠르다. – bsd

1

당신은이 :

public final class Event<T> { 
    ... 
    public final static EventFactory<Event<T>> EVENT_FACTORY = ... 
} 

당신은이 작업을 수행 할 수 없습니다. TEvent<T>의 특정 인스턴스와 연결된 유형이며 정적 컨텍스트에서는 사용할 수 없습니다.

이상한 모양의 공장 구현과 같이 정확히 무엇을하려고하는지 더 알지 못해도 좋은 대체 옵션을 제공하기는 어렵습니다. 이 같은

public final class Event<T> { 
    ... 
    public static <U> EventFactory<Event<U>> createEventFactory() { 
     return new EventFactory<Event<U>>() { 
      public Event<U> newInstance() { 
       return new Event<U>(); 
      } 
     }; 
    }; 
} 

을 그리고 호출 : 난 당신 같은 (대신하는 방법에 넣어)를 할 수있는 가정은 명시하지 않으려면,

EventFactory<Event<Integer>> factory = Event.<Integer>createEventFactory(); 

또는 (당신이 돈 ' t 정말) 여기해야 : 당신이 Event 물건의 전체 정적 멤버 제거하고 하나 유지되지 않는 이유는

EventFactory<Event<Integer>> factory = Event.createEventFactory(); 

는 공장 분리, 예를 들면 :

public final class GenericEventFactory<T> extends EventFactory<Event<T>> { 
    @Override public Event<T> newInstance() { 
     return new Event<T>(); 
    } 
} 

그리고 적절한 경우, 예 : new GenericEventFactory<Integer>()을 사용 하시겠습니까?

+1

'Event.createEventFactory()'가 ''없이 작동해야합니다. –

+0

@ TomHawtin-tackline True. 나는 설명하기를 원했지만 나는 그것에 덧붙였다. –

관련 문제