質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

2回答

444閲覧

オーバーライドしたメソッド内から引数有のメソッドを呼び出したい。

jin007

総合スコア34

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2019/07/29 05:02

編集2019/07/31 04:48

◆実現したいこと
シェルを実行時に引数を渡し、それをjavaで受け取り処理したい。

◆前提
・シェル内はソースを中身を確認できませんでしたが、値が渡せるのは確実らしい。(すみません)
・methodクラスの中身を変更することはNG。
・今回一部新たに実装したいからカスタマイズしている。
・シェルは「sh Start.sh 001」という感じで実行します。

◆考えたこと
・mainBatch()は継承しないといけないので、mainBatch()内から引数有のmainBatch(引数)を呼び出す。

◆ソース

java

1public abstract class method throws Exception { 2 3 public void start() { 4 try { 5 initBatch(); 6 mainBatch(); 7 } cath (Exception e) { 8 e.printStackTrace(); 9 } 10 11 } 12 13protected abstract void initBatch() throws Exception; 14 protected abstract void mainBatch() throws Exception; 15 16}

java

1public class mainMethod extends method { 2 3 @Override 4 protected void initBatch() throws Exception { 5 //継承しているので仕方なく実装。 6 //ここで引数ありのmainBatchメソッド(引数有)呼出をしたい 7 8 } 9 10 @Override 11 protected void mainBatch() throws Exception { 12 //継承しているので仕方なく実装。 13 //ここで引数ありのmainBatchメソッド(引数有)呼出をしたい 14 15 } 16 17  //このメソッドでバッチからの引数を受け取る想定 18 public void mainBatch(String args[]) throws Exception { 19 20 String word = args[0] 21 22 if(word == null || word.isEmpty()) { 23 System.out.println("空です。") 24 } else { 25 System.out.println("シェルから渡された引数は" + word + "です。"); 26 } 27 28 } 29}

◆備考
今回考えた方法はこの通りなのですが、他に実装方法があれば教えていただけたらと思います。

◆追記
今回shの中身が分からないということで、設定ファイルから値を取得して変数に格納する方法をとりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/29 08:34

前提 に「らしい」が入ってる時点で 設計不可ですので突き返しましょう
jimbe

2019/07/29 12:02

Start.sh の中身が分からなければ, java の各メソッドがどうなっていれば良いのか分かりません.
guest

回答2

0

javaをシェルから実行して最初に呼び出されるのはmain()メソッドじゃないですかね?
(**"おまじない"**のように覚えさせられたであろうpublic static void main(String[] args){~}ですね。)
JavaVMから最初に呼ばれるのは"おまじない"のmain()メソッドなはず。

なので、

sh Start.sh 001

001はそのままJavaの実行コマンドの引数に渡されて

java mainMethod 001

になるんじゃないかと。

001が main()メソッドの引数String[] argsに渡ってきますよ。
String ではなく 配列のString[]なのが肝。
001 は 第一引数なので、args[0]でとれますね。

あとは、main() の中で煮るなり焼くなり(笑)

(クラス名もmainMethodになっているしね^^)

余談:
シェルの中身が気になるなら、「シェルからJavaを実行」でググればすぐ出てきますよ。
参考までに -> Java起動シェルスクリプトファイル(sh)

投稿2019/07/29 07:14

編集2019/07/29 07:31
kaputaros

総合スコア1844

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2019/07/29 08:03

私の勘だと 「java mainMethod 001」でなく、「java SomeRunClass fqcn.mainMethod」っていうシェルの気がします。 で、リフレクションでクラス作られて、startが呼ばれるんじゃないかなぁ。
kaputaros

2019/07/31 08:48

あ、初心者マークついてたので授業か実習の一環と勘違いしました(笑) すみません^^; んー、結局のところ、シェルでどう呼び出しているかの仕様がはっきりしないことには 憶測でしか話ができないですね。 他のところ(継承先)ではどうしているか、とか、どの環境上で、とか、わからないかなぁ。 自分なら、Eclipseでソースを開いているなら、"method"のクラスで迷わずF4押して継承関係みるかな。
guest

0

実装レベルでは問題ないと思います。
ようは、 //ここで引数ありのmainBatchメソッド(引数有)呼出をしたい
の部分で、そのままメソッドを呼べばいいです。

が、実際に、引数つきのmainBatch(String[])を呼出しするためには、シェルからの起動引数を
どこかに格納しておく必要があると思います。

このソースからでは起動方法がわからないので、なんともですが・・・

シェルを実行時に引数を渡し、

の部分について検討が必要かと思います。

投稿2019/07/29 05:41

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問