Изменение стиля шрифта кнопки [дубликат]

Чтобы немного расширить на ответ Кипа , вот простой метод Java 7+ для добавления новой строки в файл, создавая его, если он еще не существует:

  try {final Path path = Paths.get ("путь / to / filename.txt");  Files.write (путь, Arrays.asList («Новая строка для добавления»), StandardCharsets.UTF_8, Files.exists (путь)? StandardOpenOption.APPEND: StandardOpenOption.CREATE);  } catch (final IOException ioe) {// Добавляем вашу собственную обработку исключений ...}  

Примечание: В приведенном выше примере используется файл Files.write [ ! d1], который записывает строки текста в файл (т. е. аналогично команде println ). Чтобы просто написать текст до конца (т. Е. Аналогично команде print ), можно использовать перегрузку Files.write , проходящую в байтовом массиве (например, "MYTEXT" .getBytes (StandardCharsets.UTF_8) ).

80
задан user710818 23 January 2012 в 16:44
поделиться

11 ответов

Почему это невозможно:

Поскольку String и Integer не находятся в одной иерархии объектов.

      Object
     /      \
    /        \
String     Integer

Кастинг, который вы пытаетесь, работает только в том случае, если он в той же иерархии, например

      Object
     /
    /
   A
  /
 /
B

В этом случае (A) objB или (Object) objB или (Object) objA будут работать.

Следовательно, как уже упоминалось ранее, конвертировать целое число для использования строки:

String.valueOf(integer) или Integer.toString(integer) для примитива,

или

Integer.toString() для объекта.

131
ответ дан Bhushan 16 August 2018 в 00:21
поделиться
  • 1
    Что относительно (A) objA, (B) objB и (B) objA? – su-ex 17 December 2016 в 23:21
  • 2
    @ su-ex (B) objA не будет работать. (A) objA и (B) objB будут работать. – Bhushan 18 December 2016 в 09:16
  • 3
    Извините, вы правы, это дает ClassCastException. Остальные два совершенно бесполезны, но будут работать, конечно. – su-ex 18 December 2016 в 18:10

Нет. Каждый объект может быть добавлен к java.lang.Object, а не к String. Если вам требуется строковое представление любого объекта, вы должны вызвать метод toString(); это not так же, как приведение объекта в строку.

6
ответ дан andri 16 August 2018 в 00:21
поделиться

В вашем случае не требуется кастинг, вам нужно вызвать toString ().

Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;

Кастинг. Как это работает?

Учитывая:

class A {}
class B extends A {}

(A) & nbsp; | | (B)

B b = new B(); //no cast
A a = b;  //upcast with no explicit cast
a = (A)b; //upcast with an explicit cast
b = (B)a; //downcast

A и B в том же дереве наследования, и мы можем это сделать:

a = new A();
b = (B)a;  // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException

Компилятор должен разрешить вещи, которые могут работать во время выполнения. Однако, если компилятор знает со 100%, что бросок не может работать, компиляция завершится неудачно. Учитывая:

class A {}
class B1 extends A {}
class B2 extends A {}

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; \ (B1) & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; B1 и B2. Компилятор знает со 100%, что бросок не может работать. Но вы можете обмануть компилятор:

B2 b2 = (B2)(A)b1;

, но в любом случае во время выполнения:

Исключение в потоке «main» java.lang.ClassCastException: B1 нельзя отнести к B2

в вашем случае:

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; / & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; \ (целое число) & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; (String )

Integer i = 33;
//String s = (String)i; - compiler error
String s = (String)(Object)i;

во время выполнения: исключение в потоке "main" java.lang.ClassCastException: java.lang.Integer нельзя передать в java.lang.String

1
ответ дан Dmitry Sokolyuk 16 August 2018 в 00:21
поделиться

Для типов int используйте:

int myInteger = 1;
String myString = Integer.toString(myInteger);

Для типов Integer используйте:

Integer myIntegerObject = new Integer(1);
String myString = myIntegerObject.toString();
19
ответ дан DRiFTy 16 August 2018 в 00:21
поделиться
  • 1
    Это приводит к ненужной операции распаковки. – Ted Hopp 23 January 2012 в 16:49
  • 2
    @Ted Hopp видит мои изменения, чтобы уточнить, когда использовать каждый тип метода toString() – DRiFTy 23 January 2012 в 17:05
  • 3
    Я думаю, что последняя строка должна быть String myString = myIntegerObject.toString(); – Ted Hopp 23 January 2012 в 18:19
  • 4
    Ха-ха, ух, да! Спасибо! – DRiFTy 23 January 2012 в 18:31
  • 5
    Значительно улучшилось. +1 – Ted Hopp 23 January 2012 в 18:38

Вы не можете явно передать что-либо в файл String, который не является String. Вы должны использовать либо:

"" + myInt;

, либо:

Integer.toString(myInt);

или:

String.valueOf(myInt);

Я предпочитаю вторую форму, но я думаю, что это личное

Изменить ОК, вот почему я предпочитаю вторую форму. Первая форма, скомпилированная, может создавать экземпляр StringBuffer (в Java 1.4) или StringBuilder в 1.5; еще одна вещь - собирать мусор. Насколько я могу судить, компилятор не оптимизирует это. Вторая форма также имеет аналог Integer.toString(myInt, radix), который позволяет указать, хотите ли вы шестнадцатеричный, восьмеричный и т. Д. Если вы хотите быть последовательным в своем коде (чисто эстетически, я думаю), вторая форма может использоваться в большем количестве мест.

Редактировать 2 Я предположил, что вы имели в виду, что ваше целое число было int, а не Integer. Если это уже Integer, просто используйте toString() на нем и сделайте это.

5
ответ дан Jonathan 16 August 2018 в 00:21
поделиться
  • 1
    OP начинается с объекта Integer. Это гораздо эффективнее, чем просто myIntegerObject.toString(). – Ted Hopp 23 January 2012 в 18:21

Объекты могут быть преобразованы в строку с использованием метода toString():

String myString = myIntegerObject.toString();

Нет такого правила относительно casting . Для того, чтобы кастинг работал, объект должен быть того типа, который вы используете.

4
ответ дан millimoose 16 August 2018 в 00:21
поделиться

Нет, Integer и String - разные типы. Чтобы преобразовать целое число в использование строки: String.valueOf(integer) или Integer.toString(integer) для примитива или Integer.toString() для объекта.

45
ответ дан Petar Minchev 16 August 2018 в 00:21
поделиться
  • 1
    @Ted Hopp - какой? Если это примитивное использование первых двух, если это объект Integer, используйте третий. – Petar Minchev 23 January 2012 в 16:50
  • 2
    К сожалению. Я не видел эту последнюю фразу вашего ответа. Я удаляю свой комментарий и подтверждаю этот ответ. – Ted Hopp 23 January 2012 в 16:59
  • 3
    Аналогичная (но не дублируемая) проблема: 'int' не может быть передана в String , потому что «int» не является объектом, а тем более - иерархией String. – Kelly S. French 23 January 2012 в 17:03

Вы должны вызывать myIntegerObject.toString (), если вам требуется представление строки.

4
ответ дан Savino Sguera 16 August 2018 в 00:21
поделиться

Кастинг отличается от преобразования в Java, чтобы использовать неформальную терминологию.

Кастинг объекта означает, что объект уже является тем, на который вы его набрасываете, и вы просто рассказываете компилятору об этом. Например, если у меня есть ссылка Foo, которую я знаю, это экземпляр FooSubclass, тогда (FooSubclass)Foo сообщает компилятору: «Не изменяйте экземпляр, просто знайте, что это на самом деле FooSubclass.

С другой стороны, Integer является not a String, хотя (как вы указываете) существуют методы получения String, который представляет Integer. Поскольку ни один экземпляр Integer не может быть String, вы не можете использовать Integer в String.

2
ответ дан yshavit 16 August 2018 в 00:21
поделиться

Используйте .toString, как показано ниже:

String myString = myIntegerObject.toString();
0
ответ дан A.Aleem11 16 August 2018 в 00:21
поделиться

Использовать String.valueOf (integer) .

Возвращает строковое представление целого числа.

0
ответ дан RanRag 16 August 2018 в 00:21
поделиться
  • 1
    Как говорит Петар, это должно быть String.valueOf(integer) – Urs Reupke 23 January 2012 в 16:47
  • 2
    @UrsReupke: спасибо, на самом деле, когда я пытался добавить ссылку, я переписал ее неправильно. – RanRag 23 January 2012 в 16:50
Другие вопросы по тегам:

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