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

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

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

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

Q&A

解決済

4回答

1671閲覧

メソッドの引数の中にnew??Σ(゚ロ゚;)

feeling_jumper

総合スコア19

Java

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

0グッド

0クリップ

投稿2018/08/07 06:08

編集2018/08/07 09:35

java

1public void init(FMLInitializationEvent event){ 2 3 GameRegistry.addRecipe(new ItemStack(Items.diamond), 4 "#", 5 "#", 6 "#", 7 '#', Blocks.dirt 8 );

マインクラフトのレシピ追加するときのソースなんですが、

java

1GameRegistry.addRecipe(new ItemStack(Items.diamond)

この部分、addRecipeメソッドの引数にnewがありますよね。
これは何をしてるんでしょうか。。

引数の中でインスタンスの生成...??

ItemStackクラスを見ると、
下記のようなソースがたくさん載ってました。

public ItemStack(Item p_i1879_1_)
{
this(p_i1879_1_, 1);
}

次はどこをみればいいのかさえわからずです。。

ダイヤモンドを作るレシピを作るために、
どのクラスをそれぞれ使っているのかがわからないです。。


追記

回答いただきありがとうございます(T-T)
追加でお聞きしたい点があります。

...javaってクラスやメソッドだけでは動かなくて、
クラス(設計図)を元に、動いてくれる実態(オブジェクト)が必要と本で読んだのですが、

この場合、「レシピを作る」(設計図)クラスが、GameRegistryクラスで、
その中のaddRecipeメソッドがその機能ですよね。

そして、ItemStackという設計図を元に、
ダイヤモンドのレシピという要素を持ったオブジェクトであるitemが生成され、
そのオブジェクト自体をメソッドに渡しているということでしょうか...?
※単に、レシピっていう要素自体を渡しているということでしょか・・

addRecipeメソッドに渡しているのは、
(①ダイヤモンドのレシピ自体と、②なんか#の連続と、③ブロックである砂)
の3つの引数を渡しているということで、

そのaddRecipeメソッドは、受け取った引数を、今度は、
addShapedRecipeメソッドに渡していて、

java

1public static void addRecipe(ItemStack output, Object... params) 2 { 3 addShapedRecipe(output, params); 4 } 5 6 public static IRecipe addShapedRecipe(ItemStack output, Object... params) 7 { 8 return CraftingManager.getInstance().addRecipe(output, params); 9 }

addShapeRecipeは受け取った引数をさらに
CraftingManagerのgetInstanceメソッドのaddRecipeに渡していますよね。

java

1public class CraftingManager 2{ 3 /** The static instance of this class */ 4 private static final CraftingManager instance = new CraftingManager(); 5 /** A list of all the recipes added */ 6 private List recipes = new ArrayList(); 7 private static final String __OBFID = "CL_00000090"; 8 9 /** 10 * Returns the static instance of this class 11 */ 12 public static final CraftingManager getInstance() 13 { 14 /** The static instance of this class */ 15 return instance; 16 } 17 18 private CraftingManager() 19 { 20 (new RecipesTools()).addRecipes(this); 21 (new RecipesWeapons()).addRecipes(this); 22 (new RecipesIngots()).addRecipes(this); 23 (new RecipesFood()).addRecipes(this); 24 (new RecipesCrafting()).addRecipes(this); 25 (new RecipesArmor()).addRecipes(this); 26 (new RecipesDyes()).addRecipes(this); 27 this.recipes.add(new RecipesArmorDyes()); 28 this.recipes.add(new RecipeBookCloning()); 29 this.recipes.add(new RecipesMapCloning()); 30 this.recipes.add(new RecipesMapExtending()); 31 this.recipes.add(new RecipeFireworks()); 32 this.addRecipe(new ItemStack(Items.paper, 3), new Object[] {"###", '#', Items.reeds}); 33 this.addShapelessRecipe(new ItemStack(Items.book, 1), new Object[] {Items.paper, Items.paper, Items.paper, Items.leather}); 34353637 省略

つまりaddShapeRecipeがCraftingManagerクラスのメソッドに引数を渡すことで、
レシピの追加ができているということでしょうか。

で、わからないのが、この最後にCraftingManagerクラスのメソッドに渡しているところなんですが、
引数をどこに渡しているのかがわからないんです。

java

1public static IRecipe addShapedRecipe(ItemStack output, Object... params) 2 { 3 return CraftingManager.getInstance().addRecipe(output, params); 4 }

さっきのこのreturnの箇所なんですが、
これがCraftingManagerクラスのどこと関連しているのか知りたいです。

そして、これらの「レシピを生成する」という機能は、
クラス(設計図)だけじゃう動かないよ!って本に書いてあるんですが、
これらを機能させるためのオブジェクトとはどのことなんでしょうか。

長文ですみません。・゚゚・(>_<;)・゚゚・。
そしてなんか悪い質問の仕方だったようで、
本当にごめんなさい。。

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

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

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

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

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

guest

回答4

0

次のように書いているのと変わらないです。

Java

1ItemStack itemStack = new ItemStack(Items.diamond); 2GameRegistry.addRecipe(itemStack, 3

その場一回しか使わないオブジェクトですから、わざわざ変数に代入する必要はないのです。

次はどこをみればいいのかさえわからずです。。

ItemStackのコンストラクタのうち、Itemとintを引数に取るものを見れば良いです。

投稿2018/08/07 06:13

LouiS0616

総合スコア35658

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

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

feeling_jumper

2018/08/07 09:37

ありがとうございます!!(;д;)
feeling_jumper

2018/08/07 09:38

そして大変不躾なのですが!追加でわからないことがありまして、そちらもみていただけますと嬉しいです。。
LouiS0616

2018/08/07 09:43

Javaの勉強はどれくらいしましたか? ご自身でクラスを定義して使ってみたことはありますか? staticな要素とそうでない要素の違いは分かりますか? シングルトンって聞いたことはありますか?
feeling_jumper

2018/08/07 11:21

先月入門書を1冊買いました。そして最後まで読んだのですが、 自分でクラスを作ったこともあります。 staticな要素とそうでない要素は、正直あまり理解できてないです。。 シングルトンは聞いたことないです!
LouiS0616

2018/08/07 11:42 編集

ここで逐一説明をしても、基本的な知識がまだ足りないのでおそらく理解できないと思います。 コードを読み進めるたびに、次から次へ疑問が湧いてくることでしょう。 今はあまり深掘りせず、APIの使い方をしっかり習得する方が賢明なのではないでしょうか。 本来内部を意識しなくて良いようにAPIが用意してあるのです。 既存のコードを読み解くことは、同様のコードを書くよりときに困難なのです。
feeling_jumper

2018/08/07 11:59

そうですよね。。すみません、こんな勉強不足の私に。。 ただ、基本的な知識と呼ばれるものが多すぎて、 わからないことを見つけたら、すぐに質問して解決するという形のほうが、 前に進める気がするので、私は質問を続けたいと思います。 ありがとうございました!!
guest

0

引数の中でインスタンスの生成...??

変数におさめているかどうかの違いで、引数として実行結果を渡しているに過ぎません。
このためにしか利用しないのであれば変数を生成するのは余計なコストとなるので直接引数でnewするのは珍しいことではないです。

投稿2018/08/07 06:17

m.ts10806

総合スコア80765

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

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

feeling_jumper

2018/08/07 09:36

ありがとうございます!!(;д;)
feeling_jumper

2018/08/07 09:38

そして大変不躾なのですが!追加でわからないことがありまして、そちらもみていただけますと嬉しいです。。
m.ts10806

2018/08/07 09:59

追加も良いのですが質問に至る前提や背景、自身の理解度を書かれた方がいいかもしれません。 質問の落としどころなく追加追加ではキリがありませんし、質問者さんの目的や目標が明示されることで回答者も回答の方向性を定めやすくなります。結果、着実に解決に向かえますので。
m.ts10806

2018/08/07 10:01

あと解決済みにした質問に追記はマナー違反です。 編集する場合も慎重にしなければなりません。 新しい質問をたてるかベストアンサーを取り消すかして、適切に解決まで対応してください
feeling_jumper

2018/08/07 11:19

そうだったのですね...ルールがわからず、、申し訳ありません。。 今後気をつけます!!
m.ts10806

2018/08/07 12:20

回答者視点にたつと当然ですよ。 通知もきますしね。
guest

0

なんかのリストなんでしょう、Addするときに、その要素を生成している、というだけですね

ItemStack item = new ItemStack(Items.diamond);
GameRegistry.addRecipe(item);

と分けて書けばわかりやすいでしょうか


return CraftingManager.getInstance().addRecipe(output, params);

これも、わけて考えればいいです

var mng=CraftingManager.getInstance();
return mng.addRecipe(output, params);

ということなのでー
getInstance()を追いかけたら、CraftingManager.instanceを返してるわけで、
var mng=CraftingManager.instance;
ということになりますねー

投稿2018/08/07 06:13

編集2018/08/07 09:49
y_waiwai

総合スコア87719

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

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

feeling_jumper

2018/08/07 09:36

ありがとうございます!!(;д;) 超絶わかりやすいです!!
feeling_jumper

2018/08/07 09:38

そして大変不躾なのですが!追加でわからないことがありまして、そちらもみていただけますと嬉しいです。。
guest

0

ベストアンサー

これは何をしてるんでしょうか。。

↑「ItemStack」クラスのインスタンスを生成して、そのインスタンスをメソッド引数に渡しているのです。

投稿2018/08/07 06:11

tkturbo

総合スコア5572

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

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

feeling_jumper

2018/08/07 09:37

ありがとうございます!!(;д;)
feeling_jumper

2018/08/07 09:38

そして大変不躾なのですが!追加でわからないことがありまして、そちらもみていただけますと嬉しいです。。
feeling_jumper

2018/08/07 11:29

すみません><ルール違反でした!質問を新規作成します。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問