Java: Объяснение интерфейса Cloneable

Код для отправки ответа можно запустить только после получения результата от стороннего API. Таким образом, res.send() должно быть внутри обратного вызова request:

exports.payment = functions.https.onRequest((req, res) => {
    var db = admin.firestore();

    if(req.body.action === 'payment.created') {
        const paymentId = req.body.data.id;

        // Get Payment Information from MercadoPago
        request('https://api.mercadopago.com/v1/payments/' + paymentId + '?access_token=' + MP_ACCESS_TOKEN, function (error, response, body) {
            if (!error && response.statusCode === 200) {
                res.status(200).send('ok');
            }
        });
    }
});
32
задан Joachim Sauer 14 September 2011 в 06:43
поделиться

5 ответов

В основном это - поврежденный интерфейс. Ken Arnold и Bill Venners обсудили это в Вопросах проектирования Java.

Arnold:

Если бы я должен был быть Богом в этой точке, и многие люди, вероятно, рады, что я не, то я сказал бы, удерживают от использования Cloneable и имейте a Copyable, потому что Cloneable имеет проблемы. Помимо того, что это пишется c орфографическими ошибками, Cloneable не содержит clone метод. Это означает, что Вы не можете протестировать, если что-то - экземпляр Cloneable, бросьте его к Cloneable, и вызовите clone. Необходимо использовать отражение снова, которое ужасно. Это - только одна проблема, но один я, конечно, решил бы.

36
ответ дан 27 November 2019 в 20:38
поделиться

Посмотрите эту ошибку в базе данных ошибок Java:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098033

По существу это - недостаток дизайна в более ранних версиях Java, который они не намереваются зафиксировать в интерфейсе Cloneable, чтобы сделать, так повредил бы совместимость с некоторым существующим кодом.

10
ответ дан 27 November 2019 в 20:38
поделиться

В Java существует это понятие интерфейсов маркера. Cloneable интерфейс не имеет никаких методов или полей и служит только для идентификации семантики того, чтобы быть cloneable.

с dev-x веб-сайта:

Часто Вы будете сталкиваться с интерфейсами в Java, которые не имеют никакого поведения. Другими словами, они - просто пустые интерфейсные определения. Они известны как интерфейсы маркера. Некоторые примеры интерфейсов маркера в Java API включают:

6
ответ дан 27 November 2019 в 20:38
поделиться

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

Я нахожу этого полезным: то, что существует метод клона, но Вы не можете получить доступ, это не помогает очень.

public interface PublicCloneable extends Cloneable {
    public Object clone();
}
5
ответ дан 27 November 2019 в 20:38
поделиться

Поскольку метод клона реализован в Классе объекта из-за его "специального" условия: копия памяти объектов любого вида.

1
ответ дан 27 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

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