-3

Java が静的型と動的型の両方を許可するとどうなるでしょうか。これにより、両方の長所を活かすことができます。すなわち:

String str = "Hello";
var temp = str;
temp = 10;
temp = temp * 5;
  1. それは可能でしょうか?
  2. それは有益でしょうか?
  3. 現在、両方をサポートしている言語はありますか? また、どの程度うまく機能していますか?

より良い例を次に示します (ジェネリックは使用できませんが、プログラムは型を知っています)。

var username = HttpServletRequest.getSession().getAttribute("username");//Returns a String
if(username.length() == 0) {
    //Error
}
4

8 に答える 8

2

C#には、説明した方法で使用される「var」キーワードがありますが、型チェックが提案する値の型に基づいて、厳密に型指定された変数になります。

于 2008-09-19T03:47:02.103 に答える
1

あなたの例との違いを説明できますか

String str = "Hello";
Object temp = str;
temp = 10;
于 2008-09-19T03:35:15.017 に答える
0

@Lou:次の糖衣構文になります:

void doSth(Object foo) throws Exception{
        Method m = foo.getClass().getMethod("foo", String.class);
        m.invoke(foo, "baz");       
}

私はリフレクションを使用しますが、乱用されないように醜い方が好きです。

于 2008-09-19T08:00:04.477 に答える
0

動的に型付けされた言語は、コーディングをいくぶん単純化して高速化しますが、バグをコンパイル時 (非常に見つけやすい) から実行時 (見つけるのが難しく、予測不可能) に押しやるという代償を払います。Java がそれを導入して普及した場合、コードの品質と自分の時間をより重視する別の言語を探すでしょう。

私は Java 作業のフロント エンドとして仕事で多くの Flex 開発を行っていますが、パラメーターを使用して Flex メソッドで作業しているときに、ほとんどの場合、開発者がパラメーターに Object を使用していることに、際限なくイライラさせられます。タイプであり、ブレークポイントを使用してプログラムを実行し、メソッドへのすべての可能な呼び出しをテストしたことを期待せずに、それが持つプロパティ/メソッドがまったくわかりません。また、パラメーターに特定のクラスを使用した場合でも、プロパティ/メソッドが追加または削除されていないとは言えません。

于 2011-02-20T15:21:28.687 に答える
0

動的型付き変数の型はUniversalであり、他のすべての型はUniversalのサブタイプです。すべての型がそのようなユニバーサル型 (Java modulo unboxed 値など) から継承される言語には、既にこの機能があります。有用性については、あなたが何をしているかによって異なります。安全なタグ付き共用体を簡単に作成できる完全に静的な型システムを好むので、必要な値を変数に入れることができますが、 Universalよりも制御された方法です。

于 2008-09-19T03:43:43.983 に答える
0

はい、それは有益ですが、あなたが示している例ではそうではありません. このようなものが良いと思います

public void f(var o)
{
   o.method();
}

また、インターフェイスを導入する必要なく、method() というメソッドを使用して任意のオブジェクトで f を呼び出すことができました。慣習があるが、必ずしもインターフェースではない場所には適しています。また、動的ディスパッチを使用する言語との相互運用にも役立ちます。

于 2008-09-19T03:44:23.717 に答える
0
  1. それは可能でしょうか?
    しそうにない。Java は C に似た言語であり、当初は静的型付けのみをサポートするように設計されました。この機能を Java に導入するには多くの時間がかかりますが、開発者がそれに時間を費やすとは思えません。
  2. それは有益でしょうか?
    いいえ。Java は伝統的な言語であり、静的型付けは基本原則またはアーキテクチャの 1 つです。実際、静的型付けはプログラミングでは依然として一般的です (ここで興味深い統計を確認できます)。
  3. 現在それをサポートしている言語はありますか? また、どの程度うまく機能しますか?
    動的型付けをサポートする言語はたくさんありますが、これはご存知だと思います。言語が動的型付けをサポートしている場合、この言語に静的型付けを導入しても意味がありません...

また、例で示した機能は、静的型付けで実装できます。jon は、Java の「オブジェクト」クラスの例を示しました。C/C++ の void* でも同様のことができます。それでも、これは言語を動的型付けにはしません。

于 2008-09-19T07:33:19.780 に答える
0

動的型付けには確かに用途があります。

ただし、これを Java に追加しても意味がないと思います。Java は静的に型付けされた言語として設計されており、この時点で動的型を試して移植するには哲学的およびアーキテクチャ上の変化が大きすぎます。

適切な動的型付けが必要であるが、それでも Java エコシステムの一部になりたい場合は、動的型付けをサポートする他の優れた JVM 言語の 1 つ (Clojure や Groovy など) を検討してください。

于 2011-02-20T14:21:06.000 に答える