如何注释从抽象 Class 派生的实例变量?
How to annotate an instance variable derived from an abstract Class?
我有以下摘要Java class:
abstract class AbstractDto {
String id;
public void setId(String id) { this.id = id; }
public String getId() {return id; }
}
我还有 class 扩展了摘要 class:
class SomeDto extends AbstractDto {
@SomeAnnotation
String id;
}
我想注释从抽象派生的实例变量 class。我不确定这是否是我这样做的方式。我知道 Java 不提供变量重载,所以这是阴影。
如果我这样做会发生什么:
public void go(AbstractDto dto) {
println("dto.id: "+dto.id);
}
AbstractDto dto = new SomeDto();
dto.setId("1234");
go(dto);
由于我在设置 SomeDto 的 ID 时进行了阴影处理,因此有一个 id
从 AbstractDto 继承的变量仍未设置。
如何注释在抽象超类中定义的实例变量class?
编辑:当我这样做时:
SomeDto dto = new SomeDto();
dto.setId("123");
AbstractDto中的id和SomeDto中的id设置的是哪个?
摘要 class 中的一个方法从 id 读取然后使用哪个 id 会发生什么?
您提供的示例称为 shadowing,Java 中的字段没有覆盖。
有关 阴影 的更多信息可以在 Wikipedia:
中找到
In computer programming, variable shadowing occurs when a variable
declared within a certain scope (decision block, method, or inner
class) has the same name as a variable declared in an outer scope.
因此,要使用您的注释,您可以在摘要 class 中注释您的 id
变量(所有继承的 classes 都可以使用该注释变量),或者只注释SomeDto
的 id
变量,但你必须知道它是一个新变量(与 id 的超级 class 变量无关)
关于你的第二个问题:
Which id was set the one in AbstractDto or the one in SomeDto?
因为dto
的引用变量类型是SomeDto
,所以会设置SomeDto的id。为了进一步解释,在继承的 class SomeDto
中,您定义了另一个隐藏第一个变量的 id
变量,因此每次调用都使用对该 class 或任何继承的 [= SomeDto
的 62=] 将调用 SomeDto
class 中定义的新 id
变量。
What happens I a method in the Abstract class reads from id which id
is then used?
每次调用摘要 class 中的 id
都会使用摘要 class 中的 id
,因此在 AbstractDto
中实现的方法并使用变量 id
将使用 AbstractDto
一个。
注解定义在abstract super中的实例变量class:
这是一些现实生活中的例子,其中注释了抽象 classes 的实例变量:
- Spring, abstract class and annotations
- Spring and Abstract class - injecting properties in abstract classes
我有以下摘要Java class:
abstract class AbstractDto {
String id;
public void setId(String id) { this.id = id; }
public String getId() {return id; }
}
我还有 class 扩展了摘要 class:
class SomeDto extends AbstractDto {
@SomeAnnotation
String id;
}
我想注释从抽象派生的实例变量 class。我不确定这是否是我这样做的方式。我知道 Java 不提供变量重载,所以这是阴影。
如果我这样做会发生什么:
public void go(AbstractDto dto) {
println("dto.id: "+dto.id);
}
AbstractDto dto = new SomeDto();
dto.setId("1234");
go(dto);
由于我在设置 SomeDto 的 ID 时进行了阴影处理,因此有一个 id
从 AbstractDto 继承的变量仍未设置。
如何注释在抽象超类中定义的实例变量class?
编辑:当我这样做时:
SomeDto dto = new SomeDto();
dto.setId("123");
AbstractDto中的id和SomeDto中的id设置的是哪个? 摘要 class 中的一个方法从 id 读取然后使用哪个 id 会发生什么?
您提供的示例称为 shadowing,Java 中的字段没有覆盖。
有关 阴影 的更多信息可以在 Wikipedia:
中找到In computer programming, variable shadowing occurs when a variable declared within a certain scope (decision block, method, or inner class) has the same name as a variable declared in an outer scope.
因此,要使用您的注释,您可以在摘要 class 中注释您的 id
变量(所有继承的 classes 都可以使用该注释变量),或者只注释SomeDto
的 id
变量,但你必须知道它是一个新变量(与 id 的超级 class 变量无关)
关于你的第二个问题:
Which id was set the one in AbstractDto or the one in SomeDto?
因为dto
的引用变量类型是SomeDto
,所以会设置SomeDto的id。为了进一步解释,在继承的 class SomeDto
中,您定义了另一个隐藏第一个变量的 id
变量,因此每次调用都使用对该 class 或任何继承的 [= SomeDto
的 62=] 将调用 SomeDto
class 中定义的新 id
变量。
What happens I a method in the Abstract class reads from id which id is then used?
每次调用摘要 class 中的 id
都会使用摘要 class 中的 id
,因此在 AbstractDto
中实现的方法并使用变量 id
将使用 AbstractDto
一个。
注解定义在abstract super中的实例变量class:
这是一些现实生活中的例子,其中注释了抽象 classes 的实例变量:
- Spring, abstract class and annotations
- Spring and Abstract class - injecting properties in abstract classes