2011-02-08 14 views
0

createFontメソッドとderiveFontメソッドで独自のFontクラスを返すことができるように、Fontクラスを拡張する方法があるのだろうかと思っていました。私はtryiedてきたが、私は任意のフォントを取得できませんでしたし、それをやったときに私が得たフォントがデフォルトの1(Iは「ダイアログ」を意味)だった...フォントの拡張方法

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

。誰かが汎用フォントをあなたのコードに渡したいのであれば、MyFontのインスタンスである引数が必要です。実用的な意味がありますか?継承を使用して、いくつかのライフサイクルプロトコル(この場合オブジェクトの作成)を調整しようとしますが、これはJava OOパラダイムにはうまく適合しません。代わりにファクトリメソッド/プロトタイプを使用してください。

1st。 createFont()は静的なのでオーバーライドできません。クラスに独自のバージョンを提供することもできますが、同じメソッド名を使用すると、コードの他のユーザーを混乱させる可能性があります(また、後で同じように)。

第2位。 createFont()とderiveFont()の新しいバージョンにいくつかのショートカットを提供していますが、変更を制御したいAPIとのリンクを避けていないので、Javaの実装が変更された場合、recode/recompileする必要があります。適切な依存関係回避には、ClassNotFound例外やAPIの変更で発生する可能性のあるその他のものをたくさん集めて、リフレクションとStringコードのクラス名が含まれます。あなたはそれを望んでいません。期間。

3rd。このコードはかなり安定していて、あなたのアプリが時代遅れになり、最初から書き直される可能性があります。これは2012年の世界の終わりをはるかに超えています(または、宇宙の熱の死よりももっと近い、またはそれ以下の日付に近い)。

簡単に区別できる静的ショートカットをいくつか追加してください:Font.creatFont()にチェーンされたMyFonts.create()、font.derive(otherArgs)にチェーンされた別のMyFonts.derive(Font font、otherargs) )。 MyFonts()コンストラクタをシンプルにしておき、ファクトリ/ユーティリティクラスであることを示すために、MyFonts()コンストラクタをシールします。

関連する問題