% cat A.java
public class A{
public A(){
Class aClass=java.lang.String.getClass();
}
}
% javac A.java
A.java:4: class java.lang.Object のメソッド java.lang.Class getClass() に static 参照することはできません。
Class aClass=java.lang.String.getClass();
getClass()のクラスメソッド版が有ればいいんですが、
つーか標準クラスのソース(公開されてるんだったよね)をいじって自作すればいい(ぉ)んですが、
そもそもJavaでは肝心のクラスメソッド自体を「多態」できないために、
せっかくそうやって作った static Class Object#getClass2();(仮にこう作ったとする)
およびその子孫クラスのgetClass2()は
「どんなクラスに対しても」同じClassオブジェクトを返さざるを得ません(^^;;;;;
Class aClass=java.lang.String.getClass2();
Class bClass=java.io.File.getClass2();
のaClassとbClassが違う値になる余地が無い。
これでは使い物にならない。
なんだ (スコア:1)
VCLをC++で使えるようにしたっていうんだったら、単純に
"C++ Builder for Linux"って銘打てばいいだけだと思うんだけどなぁ。
よーわかりません。
Re:なんだ (スコア:1, 参考になる)
もともと当初の計画では Kylix = Delphi + CB だったらしいです。
やっと出揃ったって感じですね。
Re:なんだ (スコア:2, 参考になる)
Re:なんだ (スコア:2, 参考になる)
また、ObjectPascalという呼称を持つ言語としては、Borland(Delphiなど)と無縁の全然別の言語も有るんで、
紛らわしくてちょっとイヤだったというのも有るし。
…などと思っているんですが、どうでしょうかね?
>1パッケージになって出てくるとは。
もともとWin版がPascalとC++で別箱になってるのがイヤだな
(俺がC++嫌いかどうかはさておき)と思っていたんで、
一体になるというならそれに越したことはないと思ってます。
#値段次第でしょうけど。
ただまあ、C++の真髄
Re:なんだ (スコア:0)
Re:なんだ (スコア:1)
俺の認識が間違ってなければ(ぉ)本当です。
一応、同じ事が「出来る」かといえばJavaでも出来ますね。
Classクラスを使えばいい。書くとすればこんな感じ [nifty.com]ですよね多分?
が、文法とかでネイティブにサポートしてるわけじゃないので、いちいち書くのはウザイっす。
最初からclass methodやconstructor をvirtualにすることがサポートされるDelphiのほうが、綺麗。
そもそも、あれだけ動的な機能が有る言語であるくせに、
Class aClass=java.lang.String;
とか(Class名(?)をそのまま式に使う)書け
Re:なんだ (スコア:1)
> Class aClass=java.lang.String;
> とか(Class名(?)をそのまま式に使う)書けないってのが痛いぞ>Java
Class aClass=java.lang.String.getClass();
でOKという話ではない?
--- Melloques Les Covdrasey ---
Re:なんだ (スコア:1)
>でOKという話ではない?
% cat A.java
public class A{
public A(){
Class aClass=java.lang.String.getClass();
}
}
% javac A.java
A.java:4: class java.lang.Object のメソッド java.lang.Class getClass() に static 参照することはできません。
Class aClass=java.lang.String.getClass();
getClass()はクラスメソッドではなくインスタンスメソッドっす。
(インスタンスが存在するとしてその)インスタンスのクラスは何だ?と
問い合わせるためのメソッドっす。
インスタンス(通常の)とは関係なく、クラス(JavaならばClassクラスのインスタンス(^^;)を得たいと思ったとき、
前述の書き方が出来ないってのが、ちょっとイヤだなと。
getClass()のクラスメソッド版が有ればいいんですが、
つーか標準クラスのソース(公開されてるんだったよね)をいじって自作すればいい(ぉ)んですが、
そもそもJavaでは肝心のクラスメソッド自体を「多態」できないために、
せっかくそうやって作った static Class Object#getClass2();(仮にこう作ったとする)
およびその子孫クラスのgetClass2()は
「どんなクラスに対しても」同じClassオブジェクトを返さざるを得ません(^^;;;;;
Class aClass=java.lang.String.getClass2();
Class bClass=java.io.File.getClass2();
のaClassとbClassが違う値になる余地が無い。
これでは使い物にならない。
で、それを克服するための逃げ道として用意されてるのが、(俺の見落としでなければ)
static Class#forName(String name)
しか無いらしいですが、ちょっと迂遠だなと。
言語仕様を(C++から見て(笑))変更しない(クラス多態を認めない)方向で頑張るよりも、
言語仕様を変更するほうが、スマートだったのではないか、と。
Re:なんだ (スコア:0)
ではだめなのでしょうか?
Re:なんだ (スコア:1)
うわ、本当だ。
ムリヤリgetClass()を使うなら、
Class aClass= (new java.lang.String()).getClass();
ってなる訳ですね。
意味ねぇ!!(笑)
> Class aClass=java.lang.String.getClass2();
> Class bClass=java.io.File.getClass2();
> のaClassとbClassが違う値になる余地が無い。
そうなんですか。
getClass2()が作れたとしたら、aClassとbClassが(Classクラスのサブクラスでない)違うクラスになれないだけで、aClassとbClassが違う値になることは許されているのかと思ってました。
(たしかに、Objectクラスを修正するだけでは無理っぽいのかな。どうでしょう・・・)
> 言語仕様を(C++から見て(笑))変更しない(クラス多態を認めない)方向で頑張るよりも、
> 言語仕様を変更するほうが、スマートだったのではないか、と。
Javaの仕様には「型(クラス)を強く束縛したい」という意思を感じますね。
「インターフェイスによる多態で我慢せよ!!」ということか・・・。
# そーゆー話じゃない!!<自己ツッコミ
--- Melloques Les Covdrasey ---
Re:なんだ (スコア:1)
--- Melloques Les Covdrasey ---
Re:なんだ (スコア:1)
うわ。通った。
すみません。こんな非合理的な(ぉ)文法が有るなんて知りませんでした。
非合理ってのは、この構文だと、classが予約語であって一般の識別子じゃないことを
(コンパイラも人も)知っていてはじめて意味が理解可能なので。つまり意味の介入が多すぎ。
Class aClass=java.lang.String class;
とかならまだしも「判る」んだけどな。そういう構文だということになるから。
ん。それはそれとして、
Class aClass=String.class;
とも書けるのはClass#forNameより少しマシっすね。
ただ、どっちにせよ、そのaClassを使ってクラス多態をやれるわけじゃないんで、旨みは少ないです。
上記コードの続きとしてStringクラスのStaticメソッドを呼ぶような書き方をしても、エラーになる、と。
一種類のClassクラスだけじゃなくて「Hogehogeクラスの」クラスクラスを書けるようになってくれたらなあ…
% cat A.java | grep 必要個所(ぉ
Class aClass=java.lang.String.class;
String answer=aClass.valueOf(true);
% javac A.java
A.java:5: シンボルを解釈処理できません。
シンボル: メソッド valueOf (boolean)
位置 : java.lang.Class の クラス
String answer=aClass.valueOf(true);