Ticket #16005

プリミティブ型とラッパー型でのオーバーロードがある場合にメソッドの同定を誤る

오픈 날짜: 2009-04-07 16:13 마지막 업데이트: 2009-04-13 17:16

Reporter:
소유자:
(None)
Type:
Status:
Open
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
9 - Highest
Resolution:
Later
File:
None

Details

public class Hoge {
	public static void piyo(int i) {
		System.out.println("#piyo(int)");
	}
	public static void piyo(Integer i) {
		System.out.println("#piyo(Integer)");
	}
	public static void main(String[] args) throws Exception {
		FastReflect.invoke("test.Hoge", null, "piyo", Integer.valueOf(3));
	}
}

とした場合に、piyo(Integer)が呼ばれるべきところ、piyo(int)が呼び出される。

Ticket History (2/2 Histories)

2009-04-07 16:13 Updated by: nagise
  • New Ticket "プリミティブ型とラッパー型でのオーバーロードがある場合にメソッドの同定を誤る" created
2009-04-13 17:16 Updated by: matya
  • Resolution Update from None to Later
댓글 올리기

nagiseさん。ご指摘ありがとうございます。 この件ですが、ご指摘のソースのように、 >FastReflect.invoke("test.Hoge", null, "piyo", Integer.valueOf(3)); とあるように、FastReflectでは基本的にメソッド検索において、パラメータ型を意味するClass[] typesを設定せず、指定パラメータを元にパラメータ型を内部で作成しています。 このままの条件を維持した場合、オートボクシングの仕様上、プリミティブ型から、パラメータ型を取得した場合、途中でラッパークラスに変換されてしまうので、無理があります。 この形を維持せず、別途パラメータ型を指定する方法の実装が、 >FastReflect.invokeTo()があるので、これに対して、チケット#16005の修正を行いたいと考えております。

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login