2011-02-08 6 views
0

createFont 및 deriveFont 메서드로 내 자신의 Font 클래스를 반환 할 수있는 방식으로 Font 클래스를 확장하는 방법이 있는지 궁금합니다. 나는 이런 식으로 뭔가 ... 내가 tryied했습니다글꼴을 늘리는 방법

public class MyFont extends Font { 

    // Constructor 
    public MyFont (...) { 
     super(...); 
    } 

    // createFont method 
    public static MyFont createFont (...) { 
     // body 
    } 

    // deriveFont method 
    public static MyFont deriveFont (...) { 
     // body 
    } 
} 

을 의미하지만 모든 글꼴을 검색 할 수 있고, 그것을 내가 가진 글꼴을 할 때하는 것은 기본 일 (나는 "대화"를 의미)였다.

이유는 나중에 해당 VM의 Java 배포에서 최종 변경으로 인한 영향을 최소화하기 위해서입니다.

이 상기 소환 코드 :

MyFont onePoint=MyFont.createFont(MyFont.TRUETYPE_FONT,fontStream, size); 

MyFont를 그런 다음에, I 코딩 : 0 번째

public static MyFont createFont (int i, InputStream io, int size) throws FontFormatException, IOException { 
    Font font = Font.createFont(i, io); 
    MyFont kfont = new 
     MyFont(font.getName(),font.getStyle(),font.getSize()); 
    return kfont; 
} 
+0

왜 그렇게하고 싶습니까? –

+1

"글꼴을 가져올 수 없습니다"라는 의미는 무엇입니까? 수업을 어떻게 사용하는지 예를 들어주십시오. –

+1

@Andres : 제 의견으로는'Font '를 전혀 확장하지 말아야합니다. 나는 단순한 유틸리티 메소드를 추가하기 위해 그렇게 할 이유가 없다. 그 유틸리티 메소드를 당신의'FontUtil' 클래스에 추가하고'Font'를 확장하려고하지 마십시오. –

답변

0

. 누군가 일반 Font를 코드에 전달하려고하고 MyFont의 인스턴스가 필요한 인수가 필요한 경우 어떻게해야합니까? 실용적인 의미가 있습니까? Java OO 패러다임에 잘 맞지 않는 라이프 사이클 프로토콜 (이 경우 객체 생성)을 조정하기 위해 상속을 사용하려고합니다. 대신에 factory 메소드/prototype을 사용하십시오.

첫 번째. createFont()는 정적이므로 무시할 수 없습니다. 클래스에 고유 한 버전을 제공 할 수 있지만 동일한 메소드 이름을 사용하면 다른 사용자와 코드를 혼동시킬 수 있습니다 (나중에 나도 마찬가지입니다).

2nd. createFont()와 가능한 새로운 버전의 deriveFont()에 대한 단축키를 제공하면서 변경을 제어하고자하는 API에 대한 링크를 피할 수는 없으므로 Java 구현이 변경되면 주어진 방법으로 다시 코딩/재 컴파일해야합니다. 적절한 의존성 회피에는 ClassNotFound 예외를 비롯하여 API 변경시 발생할 수있는 기타 등등을 포착하여 반사 및 String 코딩 된 클래스 이름이 포함됩니다. 너는 그걸 원하지 않아. 기간.

3rd. 그냥 진정해,이 코드는 꽤 안정적이다. 당신의 앱은 시대에 뒤떨어져 처음부터 재 작성 될 가능성이 훨씬 높다. 이것은 2012 년 세계의 끝을 훨씬 넘어서는 것입니다 (또는 우주의 열사병보다 더 가까운 또는 그보다 더 가까운 관련 날짜).

간단히 구별 할 수있는 정적 바로 가기를 추가하십시오. Font.creatFont()에 연결된 MyFonts.create() 및 font.derive (otherArgs)에 연결된 다른 MyFonts.derive (글꼴 글꼴 otherargs)를 추가하십시오.). MyFonts() 생성자를 간단하게 유지하고 봉인하여 공장/유틸리티 클래스임을 나타냅니다.

관련 문제