小编use*_*349的帖子

是否可以在Java中在运行时实现接口?

我正在开发一个项目,其中有很多由库创建的对象,我无法访问这些对象的创建过程.

以下片段是说明我的问题的一个很好的例子.

码:

public class Clazz {
    //The contents of Clazz are irrelevant
    //Clazz is NOT my class. I have no access to its internal structure.
    //However, I do have access to Clazz objects that were created elsewhere.
}
Run Code Online (Sandbox Code Playgroud)

ExampleInterface 是Clazz在编译时可能会或可能不会实现的接口.

码:

public interface ExampleInterface {
    public void run();
}
Run Code Online (Sandbox Code Playgroud)

以下代码是我遇到的问题.请注意以下事项:

  1. run()仅当c是其实例时才被调用ExampleInterface.
  2. getRunConditions(Clazz c)并且executeClazz(Clazz c)是我无法访问的类中的私有方法.
  3. 在编译时,Clazz包含名为方法run().
  4. ExampleExecutor 不是我的班级.我无法以任何方式访问它(我甚至无法获得该类的实例).

码:

public class ExampleExecutor {
    public void executeClazz(Clazz c) …
Run Code Online (Sandbox Code Playgroud)

java bytecode

17
推荐指数
2
解决办法
7516
查看次数

始终使用Java Beans命名约定是一个好主意吗?

我一直觉得它非常有用,坚持在Java Beans命名约定:getX(),setX(),isX()等我认为Java Bean的命名约定提供了几个主要优点:

  1. 查看代码时,您可以立即确定方法的用途.
  2. 查看API文档时,由于Java文档的字母顺序,所有方法都组合在一起.
  3. 使用任何IDE的代码完成功能时,可以轻松直观地进行排序并找到您要查找的方法.这又是由于IDE的字母顺序.

我知道有许多类是Java API的一部分,它们不使用Java Beans命名约定.一个例子是ArrayList,它有诸如的方法size().

我实际上有两个主要问题:

  1. 总是尝试使用Java Beans命名约定是一个好主意吗?如果没有,为什么?
  2. 我知道这ArrayList是在Java Bean发布之前编写的.Oracle是否习惯对所有(或至少大多数)新内容使用Java Bean命名约定?

以下是让人们思考而不是实际问题.

如上所述,我一直坚持使用Java Bean命名约定.我认为它们在很多方面都提供了很多优势.我认为最大的问题是没有Java Beans,很多人会使用令人困惑的命名约定

个人认为应始终坚持以下内容,我很想知道人们对此的看法:

  1. 如果方法名称是名词,则该方法应返回一个值.
  2. 如果方法名称是动词,则该方法应始终执行某些操作.如果方法返回值,则返回的值应与执行的操作相关.
  3. 如果方法名称是形容词,则不应单独使用该名称.例如,big()应该是isBig().
  4. 不应该单独使用不是对象的隐式属性的名词.
    例如:
    size()House对象的适当方法,但door()不是.其原因在于它size是一种house由自然界决定的继承属性.house拥有a在物理上并不是必需的door.
    而不是door(),该方法应该被命名getDoor().
  5. 如果方法名称遵循多个词性,则该方法总是需要来自用户端的不必要的思考.因此,该方法可能应该重命名.
    例如:
    假设我有一个名为的方法profile().取决于它所属的类,profile()可能是动词或名词.我可以分析一些东西,或者我可以获得个人资料.将方法的名称更改为getProfile()doProfiling()将添加说明.

java naming-conventions javabeans

9
推荐指数
1
解决办法
297
查看次数

标签 统计

java ×2

bytecode ×1

javabeans ×1

naming-conventions ×1