当前位置: 首页 > 知识库问答 >
问题:

覆盖供应商标注为“最终”的类别

侯和惬
2023-03-14

我想覆盖JMS/serializer包中的一个类。不幸的是,这个类被标记为“最终”,我不能覆盖它。请问规避这个问题的最好方法是什么?我在symfony5.4上

下面是我想要覆盖的类:

<?php

declare(strict_types=1);

namespace JMS\Serializer\Handler;

use JMS\Serializer\GraphNavigatorInterface;
use JMS\Serializer\Visitor\SerializationVisitorInterface;
use JMS\Serializer\XmlSerializationVisitor;
use Symfony\Component\Form\Form;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface as TranslatorContract;

use function get_class;

 final class FormErrorHandler implements SubscribingHandlerInterface
{
    /**
     * @var TranslatorInterface|null
     */
    private $translator;

    /**
     * @var string
     */
    private $translationDomain;

共有2个答案

终波涛
2023-03-14

我终于找到了解决办法。我重写了FOS/SerializerbUndle中的FormErrorHandler类,然后重写了JMS中的FormErrorHandler类,我在FOS/FormErrorHandler的重载中调用了这个类。它完美地工作

景书
2023-03-14

简短的回答是,只要包作者不提供用自定义实现替换最终类的功能,您就不能覆盖最终类。

通过查看包的源代码,您可以做到这一点。SerializeBuilder构造函数类似于:

public function __construct(?HandlerRegistryInterface $handlerRegistry = null, ?EventDispatcherInterface $eventDispatcher = null)

这显然意味着您可以添加自定义处理程序。

由于有了文档,您可以轻松地实现自己的处理程序。

$builder
    ->configureHandlers(function(JMS\Serializer\Handler\HandlerRegistry $registry) {
        $registry->registerSubscribingHandler(new MyHandler());
    })
;
 类似资料:
  • 我需要在Jersey中创建一个自定义ExceptionMapper来处理Jackson返回的JsonProcessingException。 Jackson库已经以JsonMappingExceptionMapper.java和JsonParseExceptionMapper.java(链接)的形式包含了此异常的ExceptionMapper提供程序。 如果我在“my.package”中为这个异常

  • 问题内容: 考虑一下Java中的以下接口: 和以下类: 为什么类A可以出现并覆盖接口I的最终常量? 自己尝试: 问题答案: 尽管事实上您正在隐藏变量,但是知道可以在java中更改final字段非常有趣,因为您可以在此处阅读: Java 5-“最终”不再是最终的 挪威Machina Networks的Narve Saetre昨天给我发了一封便条,其中提到我们可以将句柄更改为最终数组,这是很遗憾的。我

  • 查询供应商列表 接口描述 获取所有供应商列表 URL /provider HTTP Method GET 请求参数 无 返回参数 返回参数 是否必须 类型 描述 providerId true String 供应商编号 providerName true String 供应商名称 HTTP请求示例 GET /provider HTTP/1.1 Host: api.miot.10046

  • 我有一个项目,使用SonarQube来分析我的代码。正如标题所示,尽管我有多个JUnit测试,但在SQ报告(在我的服务器上)中覆盖率指标总是显示为0。我目前运行以下命令 在詹金斯建立我的项目时(詹金斯·马文项目)。 我有类似的问题前一段时间在不同的项目。我设法通过这篇文章解决了它。然而,这一次却无济于事。搜索了一下,找到了第1条和第2条(还有一些想法类似的)。两人都提出了一些好建议,但不幸的是,没

  • 问题内容: 在编写自己的类时,是否总是有必要重写? 如果我不这样做,它将自动检查所有字段是否相同?还是只是检查两个变量是否指向同一个对象? 问题答案: 如果正在编写将要以某种方式比较其对象的类,则应重写和方法。 不提供显式方法将导致从超类继承该方法的行为,并且在超类为类的情况下,它将成为Java API规范中针对该类设定的行为。 提供方法的一般约定可以在该类的文档中找到,特别是and 方法的文档。