Java中的C#属性语法

时间:2010-06-30 09:18:23

标签: java

我已经阅读了一些问题/答案,说Java没有,也不太可能获得C#样式属性。但是,在这个问题:How to organize database access code in Android project?中,有一些示例代码的答案如下:

c = localDBRW.rawQuery(sql, selectionArgs);

在对该答案的评论中,他说localDBRW“被定义为对getWritableDatabase()的引用。”对我来说,这意味着在上面的行中调用getWritableDatabase()并在getWritableDatabase()的结果上调用rawQuery。

所以我的问题是:这是怎么做到的?

在C#中,这将是微不足道的。我是Java的新手,所以我甚至不确定哪些术语会让我得到答案。搜索“属性”,“方法”和“引用”并没有导致这种特殊用法。

答案摘要:

我正抓住一个梦想。我正在以一种意味着我的愿望成真的方式解释原始陈述。唉,这不是事情的方式。 Java没有任何C#属性语法的希望,我被驱逐到写obj.getX()而不是obj.X的永恒。

3 个答案:

答案 0 :(得分:1)

  

localDBRW“被定义为对getWritableDatabase()”的引用

我认为这只是意味着在使用之前有这个声明,仅此而已:

localDBRW = getWritableDatabase();

目前Java中没有类似属性的语义。您不能使用字段访问语法来调用方法。最接近这一点的是第一次访问某个字段并触发其初始化代码,但这是一个完全不同的结构。

相关问题

答案 1 :(得分:1)

  

localDBRW是一个getWritableDatabase()。它被定义为对getWritableDatabase()的引用。我建议您在需要时调用getWritableDatabase()而不是localDBRW。

不要从字面上理解。 localDBRW是一个属性,并使用getWritableDatabase()调用的结果初始化(某处)。所以它是一个可写的数据库。在Java中,属性永远不能保存对方法(函数指针)的引用。

答案 2 :(得分:1)

编辑以回应您的澄清。我保留了旧的答案,以防它对某人有用。

Java具有反射API,允许您查找和调用对象的任意命名方法。所以你不会有一个

 theMethod.invoke()

打电话,而不是

 // assuming you have a Class clazz and Object clazzObj
 Method theMethod= clazz .getMethod(
          "someName", null /* or a list of desired params*/);

 theMethod.invoke(clazzObj, arglist);

我认为这个(也许有一个合适的类来改变{clazzObj,theMethod}对,你可以非常接近你需要的行为,我想这是某种数据驱动的调度。

===老答案====

到目前为止,我可以看到你是tryint用一些参数执行一些SQL,然后处理结果的行和列。

这样可以通过JDBC预处理语句调用完成,对结果集进行一些迭代。结果集允许您按编号访问列。

我认为Java和C#方法之间没有任何区别。您引用的示例

c.moveToFirst();
recordID = c.getString(c.getColumnIndex("id"));
c.close();

JDBC tutorial显示如下代码

String query = "
SELECT COFFEES.COF_NAME " +
   "FROM COFFEES, SUPPLIERS " +
   "WHERE SUPPLIERS.SUP_NAME LIKE 'Acme, Inc.' " +
   "and SUPPLIERS.SUP_ID = COFFEES.SUP_ID";

ResultSet rs = stmt.executeQuery(query);
System.out.println("Coffees bought from Acme, Inc.: ");
while (rs.next()) {
    String coffeeName = rs.getString("COF_NAME");
    System.out.println("     " + coffeeName);
}

你要按姓名获得coumns。