
Quantum Harmonizer
27.12.2017
16:22:20
Вызываешь первичный конструктор из вторичного — получаешь выполнение init.

Igor
27.12.2017
18:34:38
Видео со встречи с Романом Елизаровым, посвященной корутинам в Котлине, готово!
Часть 1: youtu.be/HYhJmK9nKS4
Часть 2: youtu.be/fd9EVSxINKw

Hleb
27.12.2017
18:34:48
ееее

nikita
27.12.2017
18:38:34
супер оперативность! ?

Google

Bogdan
27.12.2017
18:46:38
блин... у меня была работа
прийдется ей подождать

Anton
27.12.2017
18:49:34
оперативненько

Igor
27.12.2017
19:13:27

Siarhei
27.12.2017
19:43:28
интересно, как с proGuard-ом дружить это дело будет

Quantum Harmonizer
27.12.2017
19:44:57

Siarhei
27.12.2017
19:45:39
то есть, прогард изменит имя переменной, но проп.нейм останется прежним?

Quantum Harmonizer
27.12.2017
19:47:59
Более того, имён локальных переменных может вообще не быть — а имя в KProperty останется.

Siarhei
27.12.2017
19:51:23
а что будет там?
всмысле в prop.name в таком случае

Quantum Harmonizer
27.12.2017
19:51:52
имя переменной из исходника :)

Google

Siarhei
27.12.2017
20:04:20
а блин, я чет магию представил какую-то
а тут всё топорно просто ))

Михаил
27.12.2017
20:14:44

Bogdan
27.12.2017
20:22:40

Quantum Harmonizer
27.12.2017
21:01:32

Igor
28.12.2017
00:19:06
Хай...
Вопрос по Dagger2 и Kotlin.
Как проижектить @Named зависимость в конструктор?

Михаил
28.12.2017
00:24:32
также как и в джаве

Igor
28.12.2017
00:28:24
ок... спасибо
ато чет пишут про страшную штуку для филда, тиа @field:[Named(name)] lateinit val varname

Михаил
28.12.2017
00:29:53
это если инжектишь через инъекцию поля
в конструкторе можно не прописывать @field:
вообще почему так? он ведь вроде по умолчанию к полю должен применится

Igor
28.12.2017
00:35:34
я пока разбираюсь, что-то мешает сборке, а что пока не пойму

olzhas
28.12.2017
04:01:30
fun main(args: Array<String>) {
class B<out T:Any>(val value:T)
fun <T:Any> B<T>.printB(v:T) {
print("${this.value} $v")
}
val b1 = B(20)
val b2 = B(30)
b1.printB(b2)
}
Почему у меня этот код компилируется и работает?
я хочу что бы метод b1.printB() принимал только Int

DY
28.12.2017
04:22:29
class B<T:Any>(val value: T)

olzhas
28.12.2017
04:33:03
Да это помогло, спасибо.

Alexey
28.12.2017
05:28:05
Столкнулся с проблемой при работе с сокетами. Один и тот же код на яве работает а на котлине нет)
Пытаюсь отправить документ на принтер через сокет. Записываю данные в socket.getOutputStream(). Так вот на яве все проходит гладко, а на котлине документ распечатывается, но вылетает exception SocketException: sendto failed: EBADF (Bad file descriptor) не знаю как с этим быть, хочется все написать на котлине, может кто знает в чем может быть причина?

Евгений
28.12.2017
05:28:51
еще бы код посмотреть

Google


Alexey
28.12.2017
05:30:04
ща
public class Printer {
public enum PaperSize {
A4,
A5
}
public Single<String> print(final String printerIP, final int printerPort,
final File file, final String filename, final PaperSize paperSize, final int copies) {
return Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> emitter) throws Exception {
Socket socket = null;
DataOutputStream out = null;
FileInputStream inputStream = null;
try {
socket = new Socket(printerIP, printerPort);
out = new DataOutputStream(socket.getOutputStream());
DataInputStream input = new DataInputStream(socket.getInputStream());
inputStream = new FileInputStream(file);
byte[] buffer = new byte[3000];
final char ESC = 0x1b;
final String UEL = ESC + "%-12345X";
final String ESC_SEQ = ESC + "%-12345\r\n";
out.writeBytes(UEL);
out.writeBytes("@PJL \r\n");
out.writeBytes("@PJL JOB NAME = '" + filename + "' \r\n");
out.writeBytes("@PJL SET PAPER=" + paperSize.name());
out.writeBytes("@PJL SET COPIES=" + copies);
out.writeBytes("@PJL ENTER LANGUAGE = PDF\r\n");
while (inputStream.read(buffer) != -1)
out.write(buffer);
out.writeBytes(ESC_SEQ);
out.writeBytes("@PJL \r\n");
out.writeBytes("@PJL RESET \r\n");
out.writeBytes("@PJL EOJ NAME = '" + filename + "'");
out.writeBytes(UEL);
out.flush();
} catch (IOException e) {
e.printStackTrace();
emitter.onError(e);
} finally {
try {
if (inputStream != null)
inputStream.close();
if (out != null)
out.close();
if (socket != null)
socket.close();
emitter.onSuccess("Succ");
} catch (IOException e) {
e.printStackTrace();
emitter.onError(e);
}
}
}
});
}
}
это ява
class Printer2 {
enum class PaperSize {
A4,
A5
}
fun print(printerIP: String, printerPort: Int,
file: File, filename: String, paperSize: PaperSize, copies: Int): Single<String> {
return Single.create<String> { emitter ->
try {
Socket(printerIP, printerPort).use { socket ->
DataOutputStream(socket.getOutputStream()).use { out ->
val ESC: Char = 0x1b.toChar()
val UEL = ESC + "%-12345X"
val ESC_SEQ = ESC + "%-12345\r\n"
out.writeBytes(UEL)
out.writeBytes("@PJL \r\n")
out.writeBytes("@PJL JOB NAME = '$filename' \r\n")
out.writeBytes("@PJL SET PAPER=" + paperSize.name)
out.writeBytes("@PJL SET COPIES=" + copies)
out.writeBytes("@PJL ENTER LANGUAGE = PDF\r\n")
out.write(file.readBytes())
out.writeBytes(ESC_SEQ)
out.writeBytes("@PJL \r\n")
out.writeBytes("@PJL RESET \r\n")
out.writeBytes("@PJL EOJ NAME = '$filename'")
out.writeBytes(UEL)
emitter.onSuccess("Success printing")
}
}
} catch (e: Exception) {
emitter.onError(e)
}
}
}
}
котлин
На котлине когда падает, ругается на эту строку :
out.writeBytes(ESC_SEQ)


Roman
28.12.2017
06:07:37
Почему падает я не знаю, но строчка out.write(file.readBytes()) это не одно и то же, что на яве.
На котлине надо так:
fileInputStream.copyTo(out, bufferSize = 3000)

Alexey
28.12.2017
06:15:37

Roman
28.12.2017
06:17:59
Так не правильно. Если файл будет большой, такой код потребует много памяти, кроме того я не знаю как сокет отреагирует на запсиь сразу огромного куска.
А вот copyTo будет кушать не более bufferSize памяти для своей работы.

Alexey
28.12.2017
06:19:06
Ок, попробую так написать

Admin
ERROR: S client not available

Boris
28.12.2017
06:22:05
@aleexey было бы лучше большие куски кода выкладывать на гист или пейстбин какой-нибудь

Alexey
28.12.2017
06:24:53

Sergey8827
28.12.2017
09:30:33
Котлин почему тытак ущербен?
Я просто хочу создать массив строк
но я не могу даже загуглить как это сделать. ЧТО?

Vladislav
28.12.2017
09:30:53
arrayOf

Sergey8827
28.12.2017
09:30:58
на яве это сделать закрытыми глазами может новичек
arrayOf
arrayOf ()<String> {
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TRACK,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.YEAR
}
не вышло...

Google

Sergey8827
28.12.2017
09:31:43
еще варианты?

Islam
28.12.2017
09:31:47
arrayOf("", "")

Sergey8827
28.12.2017
09:31:56
ясно спс

Islam
28.12.2017
09:32:01
Все намного проще)

Vitalii
28.12.2017
09:32:13
еще варианты?
Документация?
https://kotlinlang.org/docs/reference/basic-types.html
"To create an array, we can use a library function arrayOf() and pass the item values to it, so that arrayOf(1, 2, 3) creates an array [1, 2, 3]. Alternatively, the arrayOfNulls() library function can be used to create an array of a given size filled with null elements."

Vladislav
28.12.2017
09:32:21
("1", "2")
можно ввести в гугле kotlin arrays
и всё в доках)

Sergey8827
28.12.2017
09:32:49

Руслан
28.12.2017
09:32:51

Vitalii
28.12.2017
09:33:03

Евгений
28.12.2017
09:33:28
вспышки что ли на солнце?
чот все нервные какие-то

Sergey8827
28.12.2017
09:34:02
зачем 100 млн способов просто создавать массив?
?
у них там ФЕТИШ?

Евгений
28.12.2017
09:34:40
вроде arrayOf один такой