Я могу запретить статические методы вызова для экземпляра объекта?

Теперь вот решение для добавления номеров строк в Markdown.

https://shd101wyy.github.io/markdown-preview-enhanced/#/markdown-basics?id=line -numbers

Вы можете включить номер строки для кодового блока, добавив класс номеров строк.

blockquote>

15
задан Ivan 5 February 2010 в 13:14
поделиться

5 ответов

Начиная с C++ 17 можно использовать эти [[nodiscard]] атрибут:

class Something {
  public:

    ...

    static [[nodiscard]] Something fromXml(string);  // factory
    static [[nodiscard]] Something fromJson(string); // factory
    ...
};

Это не было точно, что Вы просите, но возможно лучше.

0
ответ дан 1 December 2019 в 05:12
поделиться

Неужели им действительно нужно быть членами класса? Очевидный способ предотвратить это - сделать их свободными функциями.

5
ответ дан 1 December 2019 в 05:12
поделиться

Пересмотрите вашу конструкцию вместо этого. Разделите свои статические методы на отдельный класс SomethingFactory. Это просто сбивает с толку.

0
ответ дан 1 December 2019 в 05:12
поделиться

Стандарт фактически требует, чтобы все совместимые компиляторы разрешили этот синтаксис в 9.4 [class.static] / 2:

На статические члены класса X можно ссылаться с использованием квалифицированного идентификатора {{ 1}} выражение X :: s; нет необходимости использовать синтаксис доступа к члену класса (5.2.5) для ссылки на статический член. Статический член может быть упомянут с использованием синтаксиса доступа к члену класса, в в этом случае объект-выражение оценивается .

Теперь есть некоторые вещи, которые вы можете сделать, чтобы избежать ловушки, в произвольном порядке

  • Преобразуйте их в бесплатные функции, запрещающие синтаксис
  • Улучшите соглашение об именах: createFromXml , чтобы более явно, что это фабричный метод
  • . Преобразуйте статический метод в конкретный метод, который будет выполнять операцию в объекте, и предоставит внешнюю фабрику методов, которая будет повторно использовать код.

С точки зрения дизайна, первый вариант имеет то преимущество, что он не связывает сериализованные форматы с самим классом. Что-то (лучше название) представляет объект со свойствами, операциями и всеми остальными объектно-ориентированными вещами. Но во многих случаях Что-то не связано с тем, что его можно сериализовать для отправки или хранения в разных форматах.

Пользователям вашего класса Something , которые хотят работать только с XML, даже не нужно знать, что ваш объект может быть сериализован в Json. Если вы позже добавите к классу параметр сохранения базы данных, это не повлияет ни на пользователей Json, ни на XML.

3
ответ дан 1 December 2019 в 05:12
поделиться

Если вы хотите сделать шаг дальше, ознакомьтесь с продуктами для блокировки смарт-карт CoreStreet . Это их дело.

-121--3802299-

Если теги JSF не были проанализированы, то это просто означает, что запрос не был передан через ClausingServlet . Этот сервлет отвечает за все эти вещи JSF. Необходимо проверить, соответствует ли используемый URL-адрес запроса url-pattern ClausingServlet . Обратите внимание, что он чувствителен к регистру.

Однако это может произойти, если файл был открыт непосредственно в браузере builtin среды IDE. Ты не должен этого делать. Необходимо указать нужный URL в адресной строке браузера builtin или внешнего браузера (например, MSIE/Firefox).

Обновить : еще одна вещь, вы объявили теглиб HTML JSF в атрибуте < html xmlns > ? Это значение было пропущено в фрагменте кода.

Это должно выглядеть как

<html 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">
-121--2457427-

Как сделать ваши статические члены частными?

Если вам нужно иметь статические функции членов, это может быть способом решения этой проблемы.

Почему у вас есть функция статического члена? Им нужен доступ к чему-то другому в классе? Если нет, то можно сделать их свободными функциями, которые находятся не в заголовке с Something , а в другом заголовке в отдельном пространстве имен.

-1
ответ дан 1 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: