2012-05-04 7 views
2

У меня есть функция, которую я хотел бы использовать в нескольких классах, каков правильный способ сделать это?Использование одной и той же функции в нескольких классах

Я думал создать класс и установить свои функции в static ... или, возможно, реализовать этот класс, которому нужны эти функции?

Что вы думаете?

Благодаря

+2

Просьба уточнить, что вы имеете в виду «использовать в нескольких классах»? Эти методы требуют некоторой информации о экземпляре? или это просто вычисления, которые являются общими в вашей программе, и получить все, что им нужно, через параметры? Изменяют ли эти методы состояние программы? – amit

+0

А как насчет этой «функции» (которая в Java называется * методами *) - что она делает? Является ли это скорее средством утилиты без учета состояния, например, тем, что можно найти в классе Math? Или у него есть состояние, которое может измениться? –

+0

Извините, я говорил о методах, подобных классу Math. – Shinao

ответ

4

Если этот метод не использует переменную экземпляра любого объекта, он может (и, вероятно, должны) действительно быть статичным, что делает его доступным из любой точки планеты (при условии, что это также общественности).

Хорошими примерами таких безгосударственных, доступных по всему миру методов являются методы класса java.lang.Math.

+0

Спасибо, я не был уверен, что статические методы были хорошей идеей. – Shinao

1

Это зависит от поведения функции. Для некоторых случаев достаточно положить функцию в отдельный класс и сделать ее статической. Но если вам нужно изменить его поведение, вы должны подумать о том, чтобы сделать его нестационарным, чтобы позволить переопределять его в классах потомков.

3

Это типично для реализации общих функциональных возможностей, не зависящих от экземпляра класса, в статическом классе ,, так же, как Java реализует функции, общие для всех коллекций в java.utils.Collections.

Если функциональность зависит от экземпляра, функциональность может быть разделена путем размещения реализации в базовом классе (часто абстрактного базового класса) и наследования ее в обоих классах, для которых требуются соответствующие функции.

Наконец, можно реализовать общие функциональные возможности в классе класса private-private, добавить общедоступные методы для обоих классов, вызывающих этот класс для класса-пакета для реализации.

0

Это обычно достигается с помощью утилиты класса, содержащий статические методы:

class MyCompanyUtils 
{ 
    public static encloseInQuotes(String s) 
    { 
     /* code to wrap s in quotes */ 
    } 

    public static removeTrailingSlash(String s) 
    { 
     /* code to remove trailing slash from a string */ 
    } 
}