情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | 編集

EclipseにプラグインAptana Studioを入れてHTMLを書く このエントリーを含むはてなブックマーク

Eclipseでhtmlを書く

Eclipseの設定をATOKに合わせるなどの工夫を重ねた結果、 普段書いているこのblog(html)もEclipse上で書きたくなりました。 ただし、Eclipseはプラグインがないとhtmlを書く際のサポートが特にありません。 そこで今回は Aptana StudioのEclipse用プラグインをインストールしました。

スポンサーサイト
Eclipse | コメント:1 | トラックバック:0 | 編集

Javaのraw type警告を消す方法メモ このエントリーを含むはてなブックマーク

raw type 警告

raw typeというのは、ジェネリクス型(型変数を持つ型)の<T>のような型変数部分を取り除いた型のことを言います。たとえば、「Set」は「Set<V>」のraw typeです。

そして、基本的にraw typeは、Java 5より前のバージョンとの互換性のために存在しているイメージで、利用しないことが推奨されます。なので、うかつにraw型を利用すると、次のような警告が出ますここでは、Classクラスを用いた場合です

Class is a raw type. References to generic type Class should be parametarized

日本語だと

Classはraw型です。総称型Class<T>への参照は、パラメーター化する必要があります

ここでは、Eclipseを利用していて、利用しているフレームワークなど、自分が書いたコード以外の部分に警告が表示されている状況を想定します。

Eclipseの言うとおり、アノテーションを付ける

Eclipseを使っていると、修正候補として

Add @SuppressWarnings 'rawtypes' to 'clazz'

のように表示されます。これの通りに修正すれば

Class clazz = ...

が、次のようになります。

@SuppressWarnings("rawtypes") Class clazz = ...

もしフレームワーク内にこのような修正箇所が大量にある場合、何かやる気が起こりませんし、追加する量が多いのに加えて、読むときに邪魔です。そもそもフレームワークに追記すること自体やりたくないです。

総称型にする

総称型を使わないからエラーが出るので、総称型を使えばいいわけです。ということで、シンプルには

Class

と書いてある部分を徹底的に

Class<適切な型名>

にすればいいわけです。そして、徹底的にそれをやるとどうなるかというと、

Cannot create a generic array of Class<型名>

配列でraw typeが使われていると、この方法ではまた別のエラー、そしてこちらはコンパイルできないエラーになってしまいます。

<?>で総称型にする

もっとシンプルに、<?>を問題のraw typeの後ろに付けて総称型にしてしまう手もあります。これを使うとGeneric Type配列が作成できないことを回避できるわけです。なので、配列のところだけ<?>と書いておけばいいことになります。

しかし、それでもやはりソースコードを書き換えたくない。というか、とにかく警告が邪魔なわけです。

Eclipseの警告を表示する機能を止める

警告表示自体をEclipseの設定によって抑制すればソースコードを書き換えることなく、大量の警告を止めることが出来ます。

Window>Preferences>Java>Compiler>Errors/Warnings>Generic types>Usage of a raw type」でWarningをIgnoreにすればOK。

また、設定画面の「Configure Project Specific Settings」を利用すれば、特定のProjectに対してのみこの設定を適用することも出来ます。

まとめ

Eclipseの警告を抑制する方法をメモしたかっただけです

Eclipse | コメント:0 | トラックバック:0 | 編集

Eclipse(Java)の「Cannot instantiate the type ○○」エラー このエントリーを含むはてなブックマーク

不親切なエラーメッセージだなぁと思い、検索してみたら困ってしまった人がようなのでメモ。分かる人には簡単だけど。

エラーメッセージの意味

Cannot instantiate the type ○○

というエラーが表示されたのは、おそらく

new ○○()

のようにしたときだと思います。コレは、

○○の部分がインスタンス化(new)出来ないもの(type)だよ

というエラーメッセージです。

原因

具体的な原因は、「new」の後に指定した型(type)が、インスタンス化できない「アブストラクト型(abstract type)」や「インターフェイス型(interface)」であると考えられます。 たとえば、

new Map();

は、Mapinterfaceであるためインスタンス化(new)出来ません。また、

new AbstractList();

は、AbstractListabstract classであるためインスタンス化(new)出来ません。

まとめ

エラーメッセージを見る限り、newの後に来ているものが「type(型)」だと認識できている訳なので、「cannot instantiate the abstract type」や「cannot instantiate the interface type」のようにかき分けてくれればいいのになぁ。

Effective Java 第2版
改訂第2版 Java言語プログラミングレッスン (上)
増補改訂版Java言語で学ぶデザインパターン入門

Eclipse | コメント:0 | トラックバック:0 | 編集

簡単なEclipse用コードテンプレートを作ってみた このエントリーを含むはてなブックマーク

Eclipseのコードテンプレートとは

Eclipseの.javaファイル編集中に、メソッドの内部で

syso

と入力した後に「Ctrl+Space」と入力すると、勝手に

System.out.println();

に変換されます。便利です。使ったことのある人も多いと思います。これがコードテンプレート機能です。

作るのは簡単

「Window>Preference」の「Java>Editor>Templates」の「New...」ボタンをクリックすると新しいテンプレートが作成できます。

今回作ってみたのは、「Overlay Weaver」で頻出するConfigurationクラスのsetterとgetterを生成するコードテンプレート。どういうコードが頻出なのかというと、

private int successorListLength = DEFAULT_SUCCESSOR_LIST_LENGTH;
public int getSuccessorListLength() { return this.successorListLength; }
public int setSuccessorListLength(int len) {
	int old = this.successorListLength;
	this.successorListLength = len;
	return old;
}

これが○○Configurationクラスに多くあるわけです。この頻出コードの中身を見ると、共通する部分ごとにまとめることができます。

private 型名 フィールド名 = 初期値;
public 型名 getメソッド名() { return this.successorListLength; }
public 型名 setメソッド名/(型名 フィールド名) {
	型名 old = this.フィールド名;
	this.フィールド名 = フィールド名;
	return old;
}

すると、結局指定すべきは「型名」「メソッド名」「フィールド名」「初期値」の4つだけということになり、その他の部分は使い回せると分かりますちなみに、フィールド名は「successorListLength」で、仮引数名は「len」でしたが、ここでは書きやすさを重視して、フィールド名に統一しました

あとは、これを参考にして、Eclipseテンプレートの書き方に従うだけです。

private ${field_type} ${name} = ${default_value};
public ${field_type} get${Name}() { return this.${name}; };
public ${field_type} set${Name}(${field_type} ${name}) {
	${field_type} old = this.${name};
	this.${name} = ${name};
	return old;
}

こんな感じ。本当は、Templateはもう少し工夫するための機能があるのですが、使い方がよく分からなかったのと、ちょっとやってみたけどあまり良くならなかったので断念して元に戻してしまいました。テンプレートが無いときよりかは楽が出来てミスも減るということで小文字を先頭だけ大文字に変換とか出来たら良かったのですが出来なさそうです

Eclipseで学ぶはじめてのJava
Eclipse PDTではじめるPHPプログラミング入門
Eclipse 3.4 プラグイン開発 徹底攻略

Eclipse | コメント:0 | トラックバック:0 | 編集

Eclipseがやっぱり不安定なのでJDK 6u20に戻した このエントリーを含むはてなブックマーク

Eclipseが不安定になったり起動できなくなる問題について」の対策によって、応答無しになる頻度が大きく減少したのですが、それと関連するのかどうなのか、負荷が大きめの操作(呼び出しもとを検索など)を行ったとき、たまにやはり応答無しになってしまいました。そこで、結局JVMを古い物に戻すことにしました。

JDK 6u21のアンインストール

アンインストールは、コントロールパネルの「プログラムと機能」から行うことが出来ます。JREとJDKが別々なので、両方アンインストールしてしまってくださいちなみに、新しいバージョンがインストールされている状態では古いバージョンのJDKをインストールしようとしてもうまくいきません。もしアンインストール前に古いバージョンをインストールしようとしてしまった場合は、なぜかプログラムと機能には登録されてしまうので、それも含めてアンインストールしてください

JDK 6u20のダウンロード

Java関連のソフトウェアの古いバージョンはArchiveページから入手可能で、特にJDK/JRE 6u20は「Archive: Download Java Platform Standard Edition (Java SE) 6 Update 20」からダウンロードできます。

JDK 6u20のインストール

インストールはバージョンが古いからといって、特に注意することなく実行できます。

Eclipseがクラッシュしなくなった

JDKのバージョンを元に戻したことで、応答無しになることが(今のところ)全くなくなりました。eclipseを安定させたい場合には有効な手段だと思います。

Eclipseで学ぶはじめてのJava
Eclipse PDTではじめるPHPプログラミング入門
Eclipse 3.4 プラグイン開発 徹底攻略

Eclipse | コメント:0 | トラックバック:0 | 編集
 | HOME |  OLD >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。