В Java, когда я должен использовать абстрактный метод в интерфейсе?

Вероятно, не большая часть производительности дружественный путь, но Вы могли создать скалярную функцию, которая вытягивает из информационной схемы с именем таблицы и именем столбца, и затем назовите то использование isnull логики, которую Вы попробовали ранее:

    CREATE FUNCTION GetDefaultValue
    (
        @TableName VARCHAR(200),
        @ColumnName VARCHAR(200)
    )
    RETURNS VARCHAR(200)
    AS
    BEGIN
        -- you'd probably want to have different functions for different data types if
        -- you go this route
    RETURN (SELECT TOP 1 REPLACE(REPLACE(REPLACE(COLUMN_DEFAULT, '(', ''), ')', ''), '''', '') 
            FROM information_schema.columns
            WHERE table_name = @TableName AND column_name = @ColumnName)

    END
    GO

И затем называют его как это:

INSERT INTO t (value) VALUES ( ISNULL(@value, SELECT dbo.GetDefaultValue('t', 'value') )
5
задан Community 23 May 2017 в 12:24
поделиться

10 ответов

Функциональной разницы нет. В интерфейсе java никогда не предоставляется никакой реализации, поэтому все объявления методов неявно абстрактны.

См. [1]: http://java.sun.com/docs/books/tutorial/java/IandI/abstract. html

Прямая цитата из приведенного выше:

Примечание. Все методы в интерфейсе (см. раздел «Интерфейсы») неявно абстрактны, поэтому модификатор abstract не используется с методами интерфейса (это может быть - это просто не обязательно).

18
ответ дан 18 December 2019 в 05:13
поделиться

Interface methods are both public and abstract by default. There's no difference between foo() and bar() and you can safely remove all public and abstract keywords.

17
ответ дан 18 December 2019 в 05:13
поделиться

Вы ничего не упускаете. Из Спецификации языка Java :

Объявление каждого метода в теле интерфейса неявно абстрактный, поэтому его тело всегда представлены точкой с запятой, а не блок.

Каждое объявление метода в теле интерфейса неявно является общедоступным.

Другими словами, вы можете опустить общедоступный , а также реферат по методам интерфейса.

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

Это избыточно (нет разницы между двумя объявлениями) и явно не рекомендуется в разделе 9.4 спецификации языка Java:

Для совместимости со старыми версиями платформы Java разрешено но разочарованный, как вопрос стиля, для избыточного указания аннотации модификатор для методов, объявленных в

И public также не нужны и не рекомендуются:

Разрешено, но настоятельно не рекомендуется из соображений стиля, избыточно указывать модификатор public для методов интерфейса.

Я не знаю, почему public категорически не рекомендуется, а abstract просто не рекомендуется ...

4
ответ дан 18 December 2019 в 05:13
поделиться

Both accomplish the same, since all methods in an interface are abstract.

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

abstract in this scenario is unnecessary (as is marking methods in interfaces as public).

You would instead use this on a method in an abstract class in order to enforce its overriding by a subclass.

2
ответ дан 18 December 2019 в 05:13
поделиться

There no are difference between declarations. Conceptually, all methods in an interface are abstract.

2
ответ дан 18 December 2019 в 05:13
поделиться

Без разницы. Все методы в интерфейсе java всегда абстрактны.

См. Первое примечание по этой ссылке: http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html

2
ответ дан 18 December 2019 в 05:13
поделиться

И foo (), и bar () являются абстрактными, поскольку они объявлены внутри интерфейса. Абстрактное слово, которое вы здесь использовали, не имеет значения - лучше удалите его.

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

Интерфейсы в java "каким-то образом" равны полностью абстрактным классам, поэтому добавление ключевого слова abstract к объявлению метода в интерфейсе не имеет ничего общего с методом!

0
ответ дан 18 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

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