Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Конструкции Java фукнций - Программирование Android

15.09.2013, 18:53. Просмотров 371. Ответов 9
Метки нет (Все метки)

Не так давно ушел с Делфи и часто спотыкаюсь на мелочах:

1) Бывают ли в функциях параметры "по умолчанию"?
типа "паскалевского":
Java
1
public static String GetVersionName(Context Context1, String ClassName="") {...
Что-бы одновременно работали и
Java
1
2
3
GetVersionName(this)
 и 
GetVersionName(this, "com.myclass")
или надо создавать две одноименные функции? можно простой пример?

2) Как возвращать НЕСКОЛЬКО значений из функции?
Java
1
public static int GetVersionName(Context Context1, String out_version1, String out_version2) {... out_version1 = "123";...
типа "паскалевского":
Pascal
1
function GetVersionName(Context1: Context; var out_version1: String; var out_version2: String): integer;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 18:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструкции Java фукнций (Программирование Android):

Ошибка java.lang.ClassCastException: com.organizer.ToDoItemDescr cannot be cast to java.util.Map - Программирование Android
Ошибка появляется когда пытаюсь вытянуть из кастомного адаптера запись ListView. Весь лог ошибки такой: FATAL EXCEPTION: main Process:...

Не создаются BuildConfig.java R.java - Программирование Android
BuildConfig.java , R.java Не создаются в папке /gen при создании проекта в eclipse. Переустанавливал программу, ничего не помогает. Что...

Конструкции языка Java - Java
Добрый Вечер!!! скажите Пожалуйста, что на Java похоже на паскальевскую функцию IntToStr ?

Передача объектов из фукнций - C++ Linux
Понемногу изучаю С++. Поэтому вопрос нубский. Есть код: #include <iostream> #include <cstdlib> using namespace std; ...

Возникает ошибка в проекте. Дублирование имен фукнций - C++
Доброго времени суток, друзья. Имею проект, довольно крупный. К сожалению, столкнулся с проблемой: при компиляции выдаёт следующие ошибки: ...

Конструкции <% %> - C# MVC
Немогу понять в чем различия между конструкциями &lt;% %&gt;, &lt;%= %&gt;, &lt;%# %&gt;, &lt;%@ %&gt;, &lt;%$ %&gt;, &lt;%: %&gt; (есть еще вроде какие-то). Может кто...

9
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
15.09.2013, 18:57 #2
1. Параметров по умолчанию нет. Есть перегруженные функции, они должны, принимать разное количество аргументов.
2. Несколько нельзя. Возвращайте массив

Пример перегруженной функции:
Java
1
2
public boolean isLie (String word, int sex) { ... }
public boolean isLie (String word, int sex, int duration) { ... }
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
15.09.2013, 20:10  [ТС] #3
Цитата Сообщение от haribo Посмотреть сообщение
2. Несколько нельзя. Возвращайте массив
Можно пример?
0
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
15.09.2013, 20:35 #4
Java
1
2
3
4
5
public List<Integer> returnList() {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    return list;
jdk 1.7
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
15.09.2013, 20:58  [ТС] #5
1) можно ли сделать такое?
Java
1
2
3
4
// полная функция со всеми параметрами (большая и сложная)
public boolean isLie (String word, int sex, int duration) { ... }
// определяем "сокращенный вариант
public boolean isLie (String word, int sex) { return isLie (word, sex, 123); }
2) Как сделать аналог такого:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int a = 123;
inb b = 312;
String s = "asdf";
int res1 = myFunc(1, 2, [a, b, s]);
// значения a, b, s - поменялись!
if (a == 567) {
  Log.e("ERROR", s, null);
}
 
public List<Integer> myFunc(int r, int e, List[a, b, c] ) {
    a = 567;
    c = "my error";
    List<Integer> list = new ArrayList<>();
    list.add(a);
    list.add(b);
    list.add(c);
    return list;
}
В Делфи были понятия "ссылок на переменные" и можно было написать:
Pascal
1
2
3
4
5
function myFunc(Pointer a; Pointer b) integer;
begin
  integer(a^) = 1234;
  string(b^) = "asdf";
end;
Сейчас возникло желание написать функцию получения версии и описания файла или класса одновременно.
Создавать лишние (сборные) типы данных можно, но не хочется...
Примерно так:
Java
1
2
3
4
5
6
7
8
9
10
11
String vers1="";
int vers2=0;
myFunc("com.myprg.main", vers1, vers2);
// получено, можно использовать
// if (vers2<2) ... нужно обновлять...
String vers3="";
int vers4=0;
myFunc("com.myprg.notmain", vers3, vers4);
// и т.д.
 
public bool myFunc(string ClassName, String ver1, int ver2) {
0
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
15.09.2013, 21:06 #6
1. Да. Конечно.
2. Java строго типизированный язык, отсюда следует следующее ограничение:
Список (List) не может содержать в себе различные типы данных. То есть список только с числами, только со строками.

3. "ссылок на переменные"
Java
1
2
3
4
// В JAVA все есть ссылки на переменные. То есть:
String a = "foo";
String b = "bar";
a = b; // ссылка a теперь равна ссылке b (то есть ссылка а ссылается на объект b по ссылке b)
Последнюю часть сообщения не понял.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
15.09.2013, 21:19  [ТС] #7
>>>Сейчас возникло желание написать функцию...
С этого желания и возникла эта ветка форума...
Есть метод, который открывает файл, парсит его и выдирает только 2 параметра - число и строку.
На вход подается название файла, а на выход... 2 параметра вместо одного. Разного типа.
Результат функции надо положить в 2 разные переменные для дальнейшего использования..
Функция выполняется несколько раз для разных файлов. Функция находится в отдельном классе выделеном для обновления программ. Результаты выводятся пользователю.

Хотелось бы оформить это примерно так
Java
1
2
3
4
String vers1="";
int vers2=0;
updater.getVersion("myprg.apk", vers1, vers2);
// vers1, vers2 заполнены из myprg.apk и выводятся пользователю...
альтернативой вижу создание класса getVersionRes с глобальными переменными ver1, ver2 для результата. и использования конструкции вида:

Java
1
2
3
updater.getVersionRes res1 = updater.getVersion("myprg.apk");
String vers1=res1.ver1;
int vers2=res1.ver2;
но не хочется плодить лишние типы... Можно ли это обойти?
0
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
15.09.2013, 21:29 #8
Показываю два варианта, правильный и не правильный:

1.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* Модель данных версии
*/
class VersionInfo {
    private String version;
    private Integer versionNumber;
 
    // getter and setter
}
 
// метод получения версии
public VersionInfo getVersionInfo(String className, Integer vers1, Integer vers2) {
    // here some logic
    String version = "";
    Integer versionNumber = 1;
 
    VersionInfo vi = new VersionInfo();
    vi.setVersion(version);
    vi.setVersionNumber(versionNumber);
    
    return vi;
}
2.
Java
1
2
3
4
5
6
7
8
9
10
11
public List<String> getVersionInfo(String className, Integer vers1, Integer vers2) {
    // here some logic
    String version = "";
    Integer versionNumber = 1;
 
    List<String> list = new ArrayList<>();
    list.add(version);
    list.add(versionNumber.toString());
    
    return list;
}
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
15.09.2013, 22:00  [ТС] #9
Понятно... примерно так и думал, но ожидал что будет более "элегатное" решение. Подобных процедур может быть много и для каждой функции плодить тип для результата не хотелось!
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.09.2013, 01:08 #10
есть класс Pair который можно использовать для возврата двух переменных, анологичные классы можно сделать для 3+ переменных, а вообще почитайте книгу "Совершенный код" или что-то в этом роде.

Добавлено через 2 минуты
http://www.javatuples.org/index.html
0
16.09.2013, 01:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 01:08
Привет! Вот еще темы с ответами:

Сборные конструкции - Prolog
Народ,помогите плз!!Надо написать программу на SWI Prolog!! Составить план проведения контрольных работ на 6 рабочих дней. Условия: ...

Цикловые конструкции - Assembler
Всем привет.Подскажите пожалуйста на примере как работают цикл loop и конструкция if.Я сегодня первый день просто.

Условные конструкции - Matlab
Столкнулся с такой проблемой. Мне необходимо задаться условием в программе при котором: S4&gt;S3 строится один график, а если S4&lt;S3 то...

Непонятные конструкции - C++
Решил порыться в исходниках игрового движка X-Ray, и встретил несколько непонятных (для меня) объявлений: Что за спецификатор стоит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.