2017-01-03 19 views
0

私はインスタンスを持っています。基本的な構造は次のとおりです。端末経由でjavaインスタンスメソッドを実行

class Instance{ 

    public void load(){ 
     ... 
    } 

    public boolean execute(){ 
     ... 
     return true; 
    } 

} 

のように、通常、我々はstatic void main(String args[])このインスタンスを実行することができるが、どのように我々はこのインスタンスを実行することができる - >load() - >​​端末またはコンパイルされたファイル.classから定義されたメソッドを実行するためにリフレクションを使用するよりもmainメソッド内で呼び出されます。
このインスタンスはプロジェクトのスクリプトのように動作しますが、クラスにmain関数を定義していないためです。

誰でも手伝ってください。

+0

できません。引数として "execute"または "load"という文字列を渡し、引数として渡された文字列に基づいてmainメソッドからメソッドを呼び出すことができます。 – jordaniac89

答えて

1

public static void main(String args[])を追加するだけで、通常の方法でクラスをコマンドラインから実行できるように、load()と​​を呼び出すことをおすすめします。とにかく独自のpublic static void main(String args[])が必要なリフレクションベースのラッパーを構築することで、問題を複雑にすることはほとんどありません。

1

どのように我々は、このインスタンスを実行することができます - ターミナル

から>(実行)あなたがすることはできません - >負荷()。

おそらくimplemented in Java 9になりますが、今のところコマンドラインからメソッドを実行する正式な方法はありません。

またはコンパイル済みのファイルの.class使用反射、あなたが言ったように反射

を使用するよりも、mainメソッド内で呼び出されます。

File pathToClass = new File("C:\\Some Folder\\"); 

Class<?> loaded = null; 
try { 
    ClassLoader loader = new URLClassLoader(new URL[] {pathToClass.toURL()}); 
    loaded = loader.loadClass("some.package.foo.Instance"); 
} catch(Exception e) { 
    //do something 
} 

Object i = loaded.newInstance(); 
Method method = loaded.getMethod("execute"); 
Boolean returnValue = (Boolean) method.invoke(i); 

私はこのかかわらをしていないお勧めします - があります通常はより良い方法であり、すべてを複雑にするだけです。

関連する問題