Обновление: спасибо, теперь я понимаю, что то, что написано ниже, сделать невозможно.
Let's say I want to create an
addmethod forIntegerand I would like it to work this way:x.add(y), wherexandyareIntegers. Is there a possibility to do this? The only thing I can think of is to create a different class that extends Integer and add a method for it, but is there any other way?
Чтобы быть ясным, причина, по которой я задавал это в первую очередь, заключается в том, что мне нужно создать общий класс, который должен уметь, например, добавлять как для Integer, так и для BigInteger, и я не хочу делать, если случаи это проверить, какой класс T для этого. Поэтому я подумал, что было бы полезно, если бы можно было сделать вышеупомянутое. Мне пока непонятно, как это сделать. Извините за такой непонятный вопрос.
P.S. Я новичок в Java и не являюсь носителем английского языка, поэтому я понимаю, что вопрос может быть очень глупым или на него уже был дан ответ, если это так, извините.
Вам не нужно добавлять этот метод. См .: docs.oracle.com/javase/tutorial/java/data/autoboxing.html Но обратите внимание, что примитивные оболочки, а также String неизменяемы.
вы не можете изменить классы в существующей библиотеке JDK! Вам придется писать в свой класс.




ОБНОВЛЕНО:
Just to be clear, the reason I was questioning it in the first place is that I need to create a generic class that should be able to do, for example, addition both for Integer and BigInteger and I don't want to make if cases that check what class is T to do that.
Почему бы не использовать java.lang.Number в качестве универсального типа, Integer и BigInteger являются подклассами java.lang.Number.
Нет, вы не можете добавить метод в Integer или создать класс, расширяющий Integer, потому что Integer - это final, конечные классы не могут быть унаследованы в Java.
Если вы просто хотите добавить два объекта Integer, просто используйте +, потому что в Java есть автоматическая упаковка и распаковка, проверьте это: https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.7.
Вы можете создать класс util, чтобы предоставить статический метод для решения этой проблемы:
class Integers {
public static Integer add(Integer i1, Integer i2) {
return i1 + i2;
}
}
Кстати, вы можете добавить методы расширения в Kotlin, где вы можете делать такие вещи, как 1.plus(2), для выполнения операций плюс.
У меня непонятный вопрос. Если вы хотите создать метод добавления внутри существующего класса Целое число, вы не можете создать его, потому что он окончательный. Вместо этого вы можете создать метод добавления в своем собственном классе.
public int add (Integer a, Integer b) {
return a + b;
}
Звонил C99. Он хочет вернуть свою функцию. ^^
@ Turing85 Почему вы упомянули C99? Я не понимаю C99 в Java
Это была шутка. Поскольку C имеет только структуры, а не классы, а структуры не имеют функций-членов. C-способ делать что-то - писать функции и передавать структуру. По сути, это то, что вы сделали для Integer, но это приводит к разделению объекта и его поведения, что, в свою очередь, снижает удобочитаемость.
@ Turing85 О, я никогда об этом не думал. Извините за серьезные ответы на смешные ответы :)
Нет, вы не можете добавлять методы к классам в JDK. И поскольку
Integerпомечен какfinal, вы не можете его расширить.