1 декабря 2015 г.

Статический импорт. Описание статического импорта

Для того чтобы понять пользу статического импорта, начнем с примера, в котором это средство не применяется. В листинге 8.1 вычисляется гипотенуза прямоугольного треугольника. В программе используются два статических метода из встроенного в язык Java класса Math, являющегося частью пакета Java.lang. Первый метод, Math.pow(), возвращает значение, возведенное в определенную степень. Второй — Math.sqrt() — возвращает квадратный корень своего аргумента.

Листинг 8.1. Вычисление гипотенузы прямоугольного треугольника

class Hypot { 
public static void main(String args[]) { 
double side1, side2; 
double hypot; 

side1 = 3.0; 
side2 = 4.0; 

// Notice how sqrt() and pow() must be qualified by 
// their class name, which is Math. 
hypot = Math.sqrt(Math.pow(side1, 2) + 
Math.pow(side2, 2)); 

System.out.println("Given sides of lengths " + 
side1 + " and " + side2 + 
" the hypotenuse is " + 
hypot); 
}}

Поскольку pow() и sqrt() — статические методы, они должны вызываться с использованием имени их класса, Math. Это приводит к довольно громоздкому вычислению гипотенузы, приведенному в следующем фрагменте:
hypot = Math.sqrt(Math.pow(side1, 2) + Math.pow(side2, 2));
Как показывает этот простой пример, необходимость указания имени класса при каждом обращении к методам pow() и sqrt() (или к любому другому математическому методу, такому как sin (), cos () и tan()) может превратиться в утомительное занятие.
Благодаря использованию статического импорта, Вы можете избавиться от обязательного указания имени класса в подобных ситуациях, как показано в новой версии программы (листинг 8.2) из листинга 8.1.

Листинг 8.2. Применение статического импорта для имен методов sqrt () и pow()

import static java.lang.Math.sqrt;
import static java.lang.Math.pow;

// Compute the hypotenuse of a right triangle.
class Hypot {
public static void main(String args[]) {
double side1, side2;
double hypot;

side1 = 3.0;
side2 = 4.0;

// Here, sqrt() and pow() can be called by themselves,
// without their class name.
hypot = sqrt(pow(side1, 2) + pow(side2, 2));

System.out.println("Given sides of lengths " +
side1 + " and " + side2 +
" the hypotenuse is " +
hypot);
}}

В листинге 8.2 имена sqrt и pow импортированы в область видимости благодаря приведенным далее операторам статического импорта:

import static Java.lang.Math.sqrt;
import static Java.lang.Math.pow;


После включения в листинг 8.2. этих операторов нет необходимости уточнять имена методов
sqrt () и pow () с помощью имени их класса. Следовательно, вычисление гипотенузы можно описать более удобным способом, как показано в следующей строке:

hypot = sqrt(powfsidel, 2) + pow(side2, 2));

Как видите, этот вариант читается гораздо легче.

0 коммент. :

Отправить комментарий