2016-10-11 14 views
0

最近、私はSlf4jの使い方を学んでいます。 JCL(Jakarta Commons Logging)では、動的バインディングを使用して実装を選択し、Slf4jは静的バインディングを使用しています。 この場合、私たちはSlf4jがもっと賢明であることを知っています。しかし、他の場合はいかがですか?静的バインディングを使用するタイミングとJavaで動的バインディングを使用するタイミング

静的バインディングと動的バインディングの両方を使用して解決できる問題が発生した場合は、どのように選択しますか?基本的な規則はありますか?

私の英語はあまり良くありません。私はそれを明確にしたかどうかは分かりません。ご質問がありましたら、ご意見ください。

THX。ここ

+0

多相ステートメントについて知っていれば、 'instanceof'を使うことができます –

答えて

0

:結合動的実行時に発生しながら、Javaで結合

1結合静的と動的との間Link

いくつかの重要な違い)静的は、コンパイル時に発生します。

2)プライベート、最終および静的メソッドおよび変数は静的バインディングを使用し、コンパイラによって結合され、仮想メソッドは実行時オブジェクトに基づいて実行時に結合されます。

3)静的バインディングはType(JavaのClass)情報をバインディングに使用し、動的バインディングはObjectを使用してバインディングを解決します。

3)オーバーロードされたメソッドは静的バインディングを使用して結合され、オーバーライドされたメソッドは実行時に動的バインディングを使用して結合されます。 Javaの

public class StaticBindingTest 
{ 
    public static void main(String args[]) 
    { 
    Collection c = new HashSet(); 
    StaticBindingTest et = new StaticBindingTest(); 
    et.sort(c); 
    } 
    //overloaded method takes Collection argument 
    public Collection sort(Collection c) 
    { 
    System.out.println("Inside Collection sort method"); 
    return c; 
    } 
    //another overloaded method which takes HashSet argument which is sub class 
public Collection sort(HashSet hs) 
{ 
    System.out.println("Inside HashSet sort method"); 
    return hs; 
} 
} 

出力で

静的バインディング例:ダイナミックの内部コレクションのソート方法

の例の出力はJavaの

public class DynamicBindingTest 
{ 
    public static void main(String args[]) 
    { 
     Vehicle vehicle = new Car(); //here Type is vehicle but object will be Car 
     vehicle.start();  //Car's start called because start() is overridden method 
    } 
} 

class Vehicle 
{ 
    public void start() 
    { 
     System.out.println("Inside start method of Vehicle"); 
    } 
} 
class Car extends Vehicle 
{ 
    @Override 
    public void start() 
    { 
     System.out.println("Inside start method of Car"); 
    } 
} 

バインディング:Insideは、車の方法を開始します

+0

あなたの答えはThxです。しかし私はその違いを知っていると言いたいと思います。私はSlf4jのようなものを選択する方法を知りたいのですが、実装をバインドするためにどちらを使うか決めています。 JCLは動的を使用しますが、Slf4jは静的を使用します。 –

+0

コンパイル時エラーは常にランタイムエラーよりも優れています。コンパイル時に遭遇する問題を知るためには、バインディングより早期のバインドを行う方が良い – Wearybands

関連する問題