- PR -

ブリッジメソッドとは

1
投稿者投稿内容
sand
大ベテラン
会議室デビュー日: 2007/01/15
投稿数: 247
投稿日時: 2007-09-09 23:16
クラスで実装されたメソッドを呼び出すためにコンパイラが自動生成したメソッドを「ブリッジメソッド」と考えてよいでしょうか?
認識があっているか確認したく投稿しました。
ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。
プレマニア
常連さん
会議室デビュー日: 2007/08/24
投稿数: 34
投稿日時: 2007-09-09 23:33
引用:

sandさんの書き込み (2007-09-09 23:16) より:
クラスで実装されたメソッドを呼び出すためにコンパイラが自動生成したメソッドを「ブリッジメソッド」と考えてよいでしょうか?
認識があっているか確認したく投稿しました。
ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。



私も知りたいです。

このページの下から2番目のパラグラフにはご質問と2文字程度しか違わない解説が載っています。

そしてこのブリッジメソッドというキーワードは.NETとはどのような関連が出てくるのでしょうか。

ご存知の範囲でご教示ください。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-09-10 00:48
こんばんは。

引用:

sandさんの書き込み (2007-09-09 23:16) より:
クラスで実装されたメソッドを呼び出すためにコンパイラが自動生成したメソッドを「ブリッジメソッド」と考えてよいでしょうか?



”ブリッジメソッド”。恥ずかしながら、初めて聞きました。
調べてみると…Java(のGenerics)にそういうのがあるんですね。
そのまんま”橋渡しのメソッド”と読むと、別にコンパイラの自動生成でなくても
普通にプログラマが書いた、委譲のメソッドも”ブリッジメソッド”と呼べる気がしますが!?

引用:

プレマニアさんの書き込み (2007-09-09 23:33) より:
このページの下から2番目のパラグラフにはご質問と2文字程度しか違わない解説が載っています。

そしてこのブリッジメソッドというキーワードは.NETとはどのような関連が出てくるのでしょうか。



リンク先のJavaコードをC#で書き直すとこんな感じですかね!?
コード:
interface I <T> {
	void printValue(T value);
}

class A : I<String> {
	public void printValue(String value)
	{
		Console.WriteLine(GetType() + ".printValue() = " + value);
	}
}

class B : I<StringBuilder> {
	public void printValue(StringBuilder value)
	{
		value.Append(" : ");
		value.Append(GetType());
		value.Append(".printValue()");
		Console.WriteLine(value);
	}
}

class Test {
	public static void Main(String[] args)
	{
		A objA = new A();
		B objB = new B();

		objA.printValue("Kitty on your lap");
		objB.printValue(new StringBuilder("Kitty on your lap"));
	}
}



これをReflectorでのぞいてみると…
コード:
internal class A : I<string>
{
	// Methods
	public A();
	public void printValue(string value);
}



Javaでいうところのブリッジメソッドのようなものは、自動生成していないようですね。
プレマニア
常連さん
会議室デビュー日: 2007/08/24
投稿数: 34
投稿日時: 2007-09-10 02:31
Tdnr_Symさんありがとうございます。

自分で試せればよかったのですが、とても参考になりました。
(「Reflector for .NET」も初めて知りました。)

不勉強な自分が言うのもなんですが、やっぱり.NETにはあまり馴染みのない
キーワードのようですね。

他で質問された方が良かったのではないかと、質問者さんの意図が気になります。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-09-10 02:34
こんばんは。

なぜJavaは(一見不要とも思える)「ブリッジメソッド」なるものを自動生成するのか?
気になってずっと考えてみたのですが…

もしかして、下記のコードのコンパイルを(警告は出すが)通したいからでは?
コード:
//I<String> objA = new A();   ではなくて
I objA = new A();

objA.printValue("Kitty on your lap");	// ここはブリッジメソッドA#printValue(Object )を呼び出す



「ブリッジメソッド」は単にJavaが
1.4以前との互換性を保ちたいがためにできたもんじゃないのかと…(*_*;
プレマニア
常連さん
会議室デビュー日: 2007/08/24
投稿数: 34
投稿日時: 2007-09-10 12:56
引用:

Tdnr_Symさんの書き込み (2007-09-10 02:34) より:

なぜJavaは(一見不要とも思える)「ブリッジメソッド」なるものを自動生成するのか?
気になってずっと考えてみたのですが…

(中略)

「ブリッジメソッド」は単にJavaが
1.4以前との互換性を保ちたいがためにできたもんじゃないのかと…(*_*;



う〜む、javaは実のところほとんど判らないのがつらいところです。すみません。
でも「ブリッジメソッド」は純粋にjava独特の仕様らしいということですね。

ということで質問者さんにはjavaの会議室(ありますよね)でお話されることを
オススメしたいですね。
1

スキルアップ/キャリアアップ(JOB@IT)