Help us understand the problem. What is going on with this article?

annotationでC#の修飾子の代替え

More than 3 years have passed since last update.

C#からJavaに移った際に、virtual とか refout などいくつか修飾子が無くて、実装者の意図を読み取りづらいなーなんて思った事がありました。
そういう言語仕様なのでしょうがないと言ってしまえばそうなのですが、
C#の方が後発の言語ですし、そちらにあるという事は、あった方が良いと感じる人が多かったんでしょ!!
ってことで、なんちゃって C# like な書き方ができるよう、以下のような Annotation を作っちゃいました。
本当は、コンパイルエラーまで出てくれればベストなのですが、さすがにそこまでは出来ません。 :sob:
ですが、カプセル化をしつつも実装者の意図を明示的に使用者に伝えられるという点で、チーム開発を行っているような現場では有効なんじゃないかな~ :neutral_face:

virtual.java
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * The virtual keyword is used to modify a method, declaration and allow for it to be overridden in a derived class. For example, this method can be overridden by any class that inherits it.<br>
 *
 * virtual キーワードは、メソッドを修飾し、派生クラスでオーバーライドできるようにするために使用します。 たとえば、このメソッドは、このメソッドを継承するクラスでオーバーライドできます。
 *
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
@Documented
public @interface virtual {

}

@Retention(RetentionPolicy.SOURCE)にしているのでコンパイル時には破棄され、余計な注釈は残らないはず!!

2.png

適用イメージはこんな感じ

sample.java
@internal class Sample {
    /**
     * ほげほげ
     **/
    public @virtual hoge(@ref Parameter arg1, @out Parameter arg2) {
        ...
    }
}

ドキュメントイメージ

今回は virtual を例にしましたが、他にも以下のようなものを用意いしておくと、開発者の意図せぬ使われ方を抑止する事ができるかもしれないです。
もちろんC#に固執する必要もないので、チーム内でルールを決めて annotation を作ってもよいですね。

修飾子 概要
virtual いわゆる pure virtual method である事を明示する修飾子。ovrride される事をある程度前提にクラス全体を設計しているとかなんとか
ref 引数を参照渡しをしている事を明示的に行う為の修飾子ですが、メソッド内部で引数の値が書き換えられる事があり得る場合に使うとか
out 引数をメソッド内部で初期化して返すとか
internal 同一プロジェクトのみ使って良いとか
threadSafe スレッドセーフである事を明示的に示すとか

思いつきでやってみたので、色々突っ込みどころがあるかと思いますがご容赦を。。。:weary:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away