У меня есть вспомогательный класс, который принимает некоторый объект, обрабатывает его и возвращает какой-либо экземпляр другого класса или даже списка объектов. Каким будет лучший способ: сделать этот вспомогательный метод статическим или нестационарным? Дело в том, что мое приложение может создавать множество объектов Car, и я думал, может ли это иметь отрицательный эффект, когда каждый из них использует статический помощник?Использование статических методов в классе-помощнике против нестатического
ответ
В большинстве вспомогательных или служебных классов используются статические методы. Вы должны использовать нестатические методы, если хотите создать несколько экземпляров вашего вспомогательного класса, но поскольку вам просто нужен простой вывод -> function -> output, я бы сделал методы статическими.
Это неправильно. Вы должны использовать статические классы/методы только в том случае, если есть веская причина для их статичности, а не наоборот. –
@shay__ как метод помощника, который не связан ни с одним из состояний, ни с необходимостью переопределения? –
@shay__ Классы полезности обычно статичны. создание экземпляра объекта для одного несвязанного метода является избыточным. его предложение не ошибается, вы неверно истолковали его. – Stavm
Возможно, это то, что можно решить, не решая жизненного цикла вспомогательного объекта, где вы его требуете.
Вы должны попытаться использовать инъекции зависимостей подход:
public class X
{
public X(IHelper helper)
{
Helper = helper;
}
private IHelper Helper { get; }
public void DoStuff()
{
var result = Helper.DoOtherStuff(input);
}
}
То есть, X
не знаю, является ли Helper всегда тот же экземпляр или, если это временный объект. Это делает код более чистым и более удобным для тестирования, потому что вы можете высмеивать помощника с помощью поддельной реализации IHelper
, чтобы убедиться, что вы просто тестируете X
.
Я бы изменил тип на 'IHelper' в вашем примере, чтобы подчеркнуть, что между' X' и его помощником нет связи –
@shay__ Я думал об этом ... Я могу изменить его, без проблем .. –
Использовать статический класс со статическими методами, без экземпляра и не только статических методов в классе.
public static class HelperClass
{
public static void HelperMethod()
{
// do something
}
}
- 1. Использование частных статических методов
- 2. Функции против статических методов
- 3. скрытие статического метода против переопределения нестатического метода
- 4. Использование андроидных статических методов
- 5. Использование личных статических методов
- 6. Использование статических методов или статических методов в классе Dao?
- 7. Использование статических методов в Android?
- 8. Решение статических методов против методов экземпляра в java?
- 9. Использование статических методов в Android с getApplicationContext()?
- 10. Использование статических методов в post post middleware
- 11. Использование статических методов в python - лучшая практика
- 12. Использование типов делегатов против методов
- 13. Использование статических методов без дескриптора класса
- 14. Использование частных статических методов Концепция ООП
- 15. PHP - Использование статических атрибутов и методов
- 16. Конструктор против блока нестатического инициализации
- 17. Производительность использования статических методов против экземпляра класса, содержащего методы
- 18. Inject Util Class с Google Guice против статических методов?
- 19. Каковы недостатки статических методов?
- 20. C#: Inheretence статических методов
- 21. Swift - Перегрузка статических методов
- 22. Несколько статических методов
- 23. Переопределение статических методов
- 24. Gmock для статических методов
- 25. Java - синхронизация статических методов
- 26. Наследование статических методов
- 27. Наследование статических методов в Java?
- 28. Конструктор в классе статических методов
- 29. Понимание статических методов в Java
- 30. Недостатки статических методов в PHP
У вас есть пример кода, который поможет ответить на наиболее подходящий вам вопрос. –
@ J.Doe Yup. У вашего автомобиля может быть плоская шина. Шутки в отдельности, можете ли вы показать нам какой-то код, пожалуйста. – CKing
Вам нужно высмеять некоторые функции при тестировании вашего класса (оригинал, а не вспомогательный класс)? Если это так, вы не должны использовать статические методы. –