1

我正在开发一个我没有编写代码的 Java 项目,它是用 Tapestry 4 编写的。下面是一些代码的示例:

@Persist
public abstract String getParentClientId();
public abstract void setParentClientId(String str);

我对Java的了解有限。我习惯于看到 getter 返回一些东西,而 setter 则设置一些东西。没有 {} 用于定义这些方法,并且它们之间没有我期望的代码。有什么我错过的约定吗?也许 getParentClientId() 隐式返回 ParentClientId 的值,或者类似的东西?您拥有的任何信息都会很棒。谢谢!

4

6 回答 6

4

这就是abstract methods为什么他们没有任何实施。要了解有关抽象类和方法的更多信息,请参阅Oracle 关于抽象方法的文档

抽象方法是在没有实现的情况下声明的方法(没有大括号,后跟分号),如下所示:

abstract void moveTo(double deltaX, double deltaY);

当抽象类被子类化时,子类通常为其父类中的所有抽象方法提供实现。但是,如果不是,则子类也必须声明为抽象的。

于 2013-11-06T06:46:33.527 回答
0

这些是抽象类。它们用于定义必须存在于该类的任何实例上的方法,但对于每个子类都不同。它们实际上是在子类中定义的。
当然,不能创建定义抽象方法的类的任何对象,因为它没有该方法的实现。因此,只有抽象类可以包含抽象方法——而且永远不能创建抽象类的实例。

于 2013-11-06T06:49:07.420 回答
0

这些方法被定义为抽象的,因此没有代码。

也许一些 Tapestry API 会通过创建动态类来实现这些抽象方法,就像您使用 @Persist 获取 getParentClientId() 一样。如果这些方法在您的代码中有效,那么一定是这种情况。

于 2013-11-06T06:48:21.620 回答
0

setter 和 getter 的典型实现是:

public String getParentClientId() { return parentClientId;}

public void setParentClientId(String str){ parentClientId = str;}

如果方法有abstract修饰符意味着它应该在子类中实现

于 2013-11-06T06:47:51.133 回答
0

你的方法是抽象的,你必须意识到它)

于 2013-11-06T06:48:05.530 回答
0

我不是 Tapestry 4 用户,但据我所知,Tapestry 4 使用了很多抽象方法声明来挂钩您不必编码的功能(例如 getter/setter)。

之后 Tapestry 4 将在运行时创建一个新类,该类继承您的类并实现您声明的一些抽象方法(基于某些 Tapestry 4 约定)。

我是 Tapestry 5 用户,在这个新版本中,框架不需要抽象方法,它们改变了运行时创建类的创建方式(它们现在使用 Plastic 框架,以前使用 javassist)以避免那些支持使用全新注释的罕见抽象声明。

如果您有时间迁移到 T5,请不要怀疑!

于 2013-11-07T18:00:57.450 回答