2014-03-12 3 views
4

첫 번째 게시물은 너무 친절합니다. :) 나는 내가 여기서 뭘 잘못하고 있는지 잘 모르겠지만, 누군가가 나를 도울 수 있기를 바랍니다.클래스 구현시 추가 메소드를 사용하여 Java 인터페이스 구현

List 인터페이스를 구현하는 클래스가 있습니다. 이 클래스에는 목록에 항목이없는 경우 목록에 항목 만 추가하는 자체 메서드가 있습니다. 문제는 내가 conditionalAdd 메서드를 사용할 때 WorkflowSubType 클래스에서 찾고 있기 때문에 내 메서드를 찾을 수 없다는 오류가 발생한다는 것입니다. 아래를 참조하십시오 :

을 내가 사용하고있는 클래스의 인스턴스 경우 :

List<WorkflowSubType> currentViolations = new Violations(); 

이 List 인터페이스를 구현 내 클래스의 정의입니다 : 그래서

import java.util.*; 

public class Violations<E> implements List<E>{ 

public Violations() {} 

public void conditionalAdd(E violation){ 
    if(violation != null) 
    if(!this.contains(violation)) 
    add(violation); 
} 

@Override 
public <T> T[] toArray(T[] a) { 
return null; 
} 

@Override 
public boolean add(E e) { 
return false; 
} 

@Override.... 

어떻게 내가 할 수있는 올 ' conditionalAdd 메서드에 액세스합니다. 내가 만든 currentViolations 객체는 List이지만 위반 유형이기도합니다. 이 말을하는 것이 맞습니까?

미리 감사드립니다.
RW

+2

인스턴스를 위반으로 캐스팅해야합니다. 그렇게하지 않으면, 컴파일러는 이것을리스트로 해석하고리스트에는'conditionalAdd' 메소드가 없습니다. '((Violations ) currentViolations) .conditionalAdd (whatever); ' – Viccari

+0

완벽합니다. 감사합니다 – RalphW

+0

답변을 추가하겠습니다. 그래서 다른 사람들은 그것의 이점을 누릴 수 있습니다. 도움이되었다고 생각하면 동의/upvote하시기 바랍니다. – Viccari

답변

1

인스턴스를 위반으로 캐스팅해야합니다. 그렇게하지 않으면 컴파일러는이를 List로 해석하고 List에는 conditionalAdd 메소드가 없습니다. 다음과 같이하십시오. ((Violations<WorkflowSubType>)currentViolations).conditionalAdd(whatever);