2011-03-24 2 views
1

나는 대답이 어딘가에 있지만, 올바른 키워드가 없거나 단순히 잠을 자야한다는 것을 알 수있다. 그러나 ~ ~ :) :Java : java.awt.image에 사용자 정의 클래스를 추가 할 수 있습니까?

나는 BufferedImage를 확장 할 필요가있다. MacGayvering 전체 클래스는 java.awt.image에 새로운 클래스를 남겨 두는 것이고, 접근 할 필요가있는 패키지 보이기 전용 필드를 포함하고 있기 때문입니다. Normaly, 그런 일을하지 않을 이유가 있지만 소스를 확인하면이 특별한 경우에는 그렇지 않다는 것을 알 수 있습니다.

나는 그것을 테스트, 컴파일 및 것 같습니다.

그러나 나는 그것에 의지 할 수 있습니까? 그것은 허용됩니까? Java의 사전 정의 된 시스템 패키지에 클래스를 추가 할 수 없도록 할 수있는 것이 있습니까? 아니면이 작업을 수행하는 올바른 방법 일 뿐이며 아무도 나에게 말하지 않았습니까? 이미 제공

UPDATE

answeres 제대로 뭔가 을하고 그 법률에 무관 beeing는되어 자주 내 기본 솔루션보다 일부 법규 위반을 의미하는 경우 (법적 문제의 가능성을 언급 ;-)과 가능성 수퍼 클래스에서 변경된 동작 (이 경우는 거의 없을 것입니다). 그게 다야, 난 UPDATE2

... 그런 식으로 할 단지 것! 자바는 ... 그래서 내가 정말이 맥가이버해야 ... 보호 패키지 이름입니다

갱신 3

내가 속성 해시 키를 취득하지 못할 이유가 궁금했다. 또한 fn의 getPropertyNames은 이렇게 설명되어 있습니다

public String[] getPropertyNames() { 
    return null; 
} 
내가 읽은

최저 코드 ...

+0

확장 클래스가 'public'이 아닌 한, 클래스 확장은 새로운 클래스의 패키지에 의존하지 않습니다. 'BufferedImage'는'public'입니다.뭐하고 있니? 그리고 왜? – Bombe

+0

이지만 BufferedImage.properties는 없습니다. 그것은 단순히 패키지로 볼 수 있습니다 : - @! 파생 된 클래스에서이 필드를 설정하는 유일한 방법은 하나의 생성자를 사용하는 것입니다. 그러나 다른 c-tor는 내가 쓸 수없는 매우 유용한 기능을 가지고 있습니다. 이 문제를 극복하는 유일한 방법은 파생 클래스를 같은 패키지에 보관하는 것입니다. – rhavin

+0

첫 번째 질문은 "무엇을하려고합니까?" Image processing을 많이 했어. BufferedImage를 확장 할 필요가 없다. 그래서, 그것은 당신이 잘못된 방식으로 문제에 접근하고있는 것일 수 있습니다. –

답변

1

좋아, 여기에 내가 이것을 처리 할 방법입니다. 을 눌러 Alt 키삽입, 오른쪽 패널에 BufferedImage을 확인하고 OK을 클릭, 왼쪽 패널에있는 필드로 realBufferedImage을 선택 Delegate Method...을 선택합니다. 즉각적인 위임.

BufferedImage의 필드가 패키지 범위에 있더라도 패키지의 다른 요소에서 액세스하지 않기 때문에이 방법이 효과가 있습니다.

+0

getPropertyNames()가 전혀 구현되지 않았기 때문에 나는 정말로 바퀴를 재발 명해야했다. 그 문제에 대한 나의 마지막 해결책은 버그 보고서와 기능 요청에 파일을 작성하는 것이 었습니다. 그리고 한 달 후에 쓸데없는 노력을 개발사에게 전하기 위해 모든 기능을 1 : 1으로 모방 한 완전한 래퍼를 작성하고 누락 된 항목을 추가했습니다. – rhavin

0

당신은 돈 ': getProperty에 (문자열)에 의해 인식되는 이름의 배열을 돌려줍니다 ...의이 소스 코드로 살펴 보자 t java.awt.Image에 "add"합니다. 자신의 패키지에서 수업을 연장하고 원하는대로 할 수 있습니다.

때때로 오픈 소스 프로젝트에서 수업을 프로젝트에 다시 제출하고 프로젝트의 일부가 될 수 있습니다.

public class MyBi extends BufferedImage 
{ 
    private final BufferedImage realBufferedImage; 

    public MyBi(BufferedImage bi) 
    { 
     super(0, 0, TYPE_INT_ARGB); 
     realBufferedImage = bi; 
    } 

    // Add methods for managing your extra data 

    // For every method in BufferedImage, override it like so: 
    public void setData(Raster r) 
    { 
     realBufferedImage.setData(r); 
    } 
} 

이 손으로 할 지루한이지만, NetBeans는 위임을 지원한다 :

+0

불가능, 위의 주석 참조 – rhavin

+0

공개 클래스의 패키지 표시 구성 요소에 의존한다고 질문했을 수 있습니다. – Speck

+0

Ack, 업데이트 됨. BTW, 나에게 당신에게 -1 ;-)을주는 것이 아니었다. – rhavin

관련 문제