2013-06-15 2 views
1

Я изучаю этот код Java о наследовании (от Core 2 Java Б.К. Хоффмана), а вот код в классе MethodPointerTest.java:Как работает функция getMethod класса класса Java класса Java?

Method square = MethodPointerTest.class.getMethod("square", double.class); 

Позже в классе There'sa функционировать следующим образом:

public static double square(double x){ 
return x * x; 
} 

почему это seocnd аргумент функции getMethod:

double.class 

Vs просто сказать "двойной"

Спасибо

+1

Вы читали о рефлексии? Потому что это все, и вы говорите методу getMethod, каков тип одиночного параметра квадратного метода. Посмотрите на [Class API, раздел getMethod] (http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getMethod). Отличная пара книг, кстати. –

+1

@HovercraftFullOfEels - Хм, да, я думаю, что больше изучу отражение. и спасибо, я нахожу это сложной и полезной книгой! – Coffee

ответ

2

Причина, по которой вам нужно добавить Double.class, заключается в том, что вы можете перегружать методы в java. Это означает, что у вас может быть много методов с тем же именем, но с разными параметрами. Из-за этого java позволяет вам указать как имя метода, так и тип его параметров при его отображении с отражением.

Причина, по которой вам требуется Double.class, а не просто double, заключается в том, что double не является типом, это двойной. Double.class - это тип.

4

Метод getMethod() принимает классы в качестве параметров для представления типа параметра (ов) методы.

Ключевое слово double используется только для объявления или изменения переменной/параметра.

С отражением вы имеете дело с метакодом, а не с кодом.

+0

Большое спасибо! – Coffee