@RequestMapping 不能在父类中使用与子类不同的静态最终常量

Posted

技术标签:

【中文标题】@RequestMapping 不能在父类中使用与子类不同的静态最终常量【英文标题】:@RequestMapping can not use a static final constant in parent class which is not in same package with subclass 【发布时间】:2020-11-10 15:35:48 【问题描述】:

当@RequestMapping 在父类中使用与子类不在同一个包中的静态最终常量时,这个想法给了我一个类似的错误

“V1_BASE_URL”在“XXXXXXXX.BaseController”中具有受保护的访问权限

所以,我不知道为什么,接下来是我的代码。

这是父类

package com.controller;
public class BaseController 

protected static final String V1_BASE_URL = "/crm/v1/";

这是子类,和BaseController 不在同一个包中

package com.controller.corpus;
@RequestMapping(V1_BASE_URL+"/crm/v1/corpus_subset")
public class CorpusSubsetController extends BaseController 


error image

我没有找到一些有用的答案可以解决我的问题,但是我发现如果子类和父亲在同一个包中,类名中的注释可以使用static constant,但是如果子类与父亲不在同一个包中,则注解不能使用,所以我的问题是类名中的注解属于谁?如果类中的注解属于包A中的哪个类,那么注解属于包A??

【问题讨论】:

这是一个重复的问题,已在此处回答 link 如果不在同一个包中,则无法通过设计访问受保护的属性,因此这是意料之中的。 这能回答你的问题吗? What is the difference between public, protected, package-private and private in Java? 见docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html 【参考方案1】:

这是因为您试图在类范围之外的注释中访问V1_BASE_URL。如果您像这样访问它,您将不会有任何编译错误,例如:

public class CorpusSubsetController extends BaseController 
    public void test() 
        String test = V1_BASE_URL;
    

【讨论】:

好的,谢谢,但我也有疑问,当子类与父亲在同一个包中时,V1_BASE_URL 可以在注解@RequestMapping 中使用,这个注解也在类范围之外。

以上是关于@RequestMapping 不能在父类中使用与子类不同的静态最终常量的主要内容,如果未能解决你的问题,请参考以下文章

java方法的重写与重载

Python在父类中使用派生类的方法?

虚方法和抽象类

在子类中定义一个属性,然后在父类中使用它,PHP中的奇怪行为?

在父类中为多个孩子定义方法

C#在父类中获取子类的类名