Синтаксис свойства C # в Java - PullRequest
1 голос
/ 30 июня 2010

Я читал вопросы / ответы о том, что у Java нет и вряд ли получатся свойства стиля C #. Однако в этом вопросе: Как организовать код доступа к базе данных в проекте Android? , есть ответ с примером кода, подобным этому:

c = localDBRW.rawQuery(sql, selectionArgs);

В комментариях к этому ответу он говорит, что localDBRW «определен как ссылка на getWritableDatabase ()». Для меня это означает, что в строке выше вызывается getWritableDatabase () и вызывается rawQuery для результата getWritableDatabase ().

Итак, мой вопрос: как это сделать?

В C # это было бы тривиально. Я новичок в Java, поэтому я даже не уверен, какая терминология приведет меня к ответу. Поиски по "свойствам", "методам" и "ссылкам" не привели к этому конкретному использованию.

Резюме ответов:

Я хватался за сон. Я истолковал исходное утверждение так, чтобы мои желания могли сбыться. Увы, это не так. Java не имеет никакой надежды на синтаксис свойства C #, и я изгнан на вечность написания obj.getX () вместо obj.X.

Ответы [ 3 ]

1 голос
/ 30 июня 2010

localDBRW - это getWritableDatabase ().Он определяется как ссылка на getWritableDatabase ().Вместо localDBRW я рекомендую просто вызывать getWritableDatabase (), когда вам это нужно.

Не воспринимайте это буквально.localDBRW является атрибутом и инициализируется (где-то) результатом вызова getWritableDatabase().Так что это база данных для записи.В Java атрибут никогда не может содержать ссылку на метод (указатель на функцию).

1 голос
/ 30 июня 2010

Отредактировано в ответ на ваше уточнение. Я сохранил старый ответ на случай, если он кому-нибудь пригодится.

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}), вы можете очень приблизиться к нужному поведению, которое, я полагаю, является некой отправкой данных.

=== старый ответ ====

Насколько я вижу, вы пытаетесь выполнить некоторый SQL с некоторыми аргументами, а затем работать с полученными строками и столбцами.

Так что это можно сделать с помощью подготовленного вызова оператора JDBC с некоторой итерацией по набору результатов. Наборы результатов позволяют вам получить доступ к столбцам по номеру.

Я не вижу здесь никакой разницы между подходами Java и C #. Пример, на который вы ссылаетесь, имеет

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

Учебник по JDBC показывает код, подобный этому

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);
}

где вы получаете кумны по имени.

1 голос
/ 30 июня 2010

localDBRW "определяется как ссылка на getWritableDatabase()"

Я полагаю, это просто означает, что до использования было это утверждение, и ничего более:

localDBRW = getWritableDatabase();

В настоящее время в Java нет семантики, подобной свойствам. Вы не можете, используя синтаксис доступа к полю, вместо этого вызывать метод. Самое близкое к этому было бы, если к полю обращаются в первый раз, и это вызывает его код инициализации, но это совершенно другая конструкция.

Похожие вопросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...