2013-05-03 2 views
1

아래 코드에 하나의 문제가 있습니다. setFavoritePicture 메서드를 호출 할 때 주 메서드에서 컴파일러 오류가 계속 발생합니다. 비 정적 변수 favPic은 정적 컨텍스트에서 참조 할 수 없다고합니다. 나는 자바에 비교적 익숙하다. 그래서 이것에 대한 어떤 도움도 감사 할 것이다! 많은 감사합니다!정적 컨텍스트에서 정적 변수 favPic을 참조 할 수 없습니다.

public class House 
{ 
    String owner; 
    Picture pRef; 
    Picture [] picArray; 
    Picture favPic; 

    public void setFavoritePicture (Picture pRef) 
    { 

    Picture favPic = new Picture (FileChooser.pickAFile()); 
    pRef = favPic ; 


    } 



    public static void main (String [] args) 
    { 
    House PhDsHouse = new House ("Mad PH.D."); 
    PhDsHouse.setFavoritePicture (favPic); 


    } 


} 

답변

1

favPicHouse 클래스의 비 정적 인스턴스 멤버이며, 당신은 당신의 정적main 메소드 내에서 참조하려고합니다. ,

Picture pic = new Picture(FileChooser.pickAFile()); 
PhDsHouse.setFavouritePicture(pic); 

그러나,이 코드를 약간 더 깊은 문제가있는 것 같습니다, 당신의 setFavoritePicture 방법이 실제로 전달 된 매개 변수에 따라 favPic 설정하지 않는 : 당신은 Picture의 인스턴스를 생성하는 대신에 그것을 전달해야 FileChooser.pickAFile에 따라 값을 설정 한 다음 전달 된 매개 변수에 해당 값을 다시 할당합니다 (아무 것도 달성하지 않음).

public void setFavoritePicture (Picture pRef) 
{ 
    favPic = pRef; 
} 

업데이트 : 귀하의 코멘트에 관한 :

은 아마 당신이 대신 뭔가를하고 싶었다

내가는 'setFavoritePicture'방법 내에서 사용 을 사진을 선택해야

'FileChooser.pickAFile()'. 그 점은이 방법의 전부입니다.

그런데 왜 매개 변수가 필요합니까? 아마 이것과 비슷한 것이 있을까요? 위의 코드에서

public class House 
{ 
    String owner; 
    Picture [] picArray; 
    Picture favPic; 

    public void setFavoritePicture() 
    { 
     Picture pic = new Picture (FileChooser.pickAFile()); 
     this.favPic = pic; 
    } 

    ... /* Rest of your class here */ 

    public static void main (String [] args) 
    { 
     House PhDsHouse = new House ("Mad PH.D."); 
     PhDsHouse.setFavoritePicture(); 
    } 
} 

, 당신은 당신의 House를 인스턴스화하고 그것의 setFavoritePicture 메소드를 호출합니다. 새로운 그림을 만드는이면의 모든 논리가 FileChooser.pickAFile에 대한 호출을 포함하여 해당 메서드에 의해 처리되면 아무 것도 전달할 필요가 없습니다.

setFavoritePicture의 책임은 객체의 마음에 드는 사진을 설정하는 것을 나에게 보인다 그리고이 파일 선택 및 사용자 입력이 다른 곳 (예 : pRef 외부 인스턴스화하는 내 이전 예에서와 같이 수행해야 처리, 그런 말로 미루어 보아, 메서드의 및 통과).

+0

세트 파브리테 (fafourite) 안쪽에 그렇게하고 있습니다. 나는 그가 OOP를 이해한다고 생각하지 않는다. 그는 단지 var를 없애고 이것을 사용해야합니다. – Nix

+0

그리고 나서'setFavouritePicture' 메쏘드는 실제로 아무 것도하지 않습니다. 매개 변수의 값을 설정해도 객체의 상태는 변하지 않습니다. –

+0

그걸 내가하지 않았 니? – Alex

관련 문제