Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для _SH_
0 / 0 / 0
Регистрация: 28.04.2016
Сообщений: 9

Обобщенный метод

16.10.2016, 16:20. Показов 982. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class C<T extends Number> {
    private T o;
    private T o2;
    
    C(T o, T o2){
        this.o = o;
        this.o2 = o2;
        
    }
    
    T getValue (){
        T number = o / o2; // здесь не пропускает, ругается. хотя все объекты одного типа
        return number;
    }
    
    public static void main(String[] args) {
        C<Double> objD = new C<>(new Double(1.0), new Double(4.0));
        System.out.println(objD.getValue());
        
        C<Integer> objI = new C<>(new Integer(1), new Integer(8));
        System.out.println(objI.getValue());
    }
}
Как правильно подставить типы в методе, чтобы решить эту задачку?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2016, 16:20
Ответы с готовыми решениями:

Обобщенный метод
Здравствуйте, не могу написать обобщенный метод , возвращающий сумму всех элементов двумерного массива , переданного как параметр в метод....

Обобщенный класс
Здравствуйте, есть такая задача: Создать обобщенный класс для хранения произвольных данных в массиве. Реализовать функцию добавления...

Массив ссылок на обобщенный тип с метасимволом
В книге Шилдта сказано, что Gen&lt;Integer&gt; gens = new Gen&lt;Integer&gt; // данное создание массива недопустимо, но если вместо Integer написать...

16
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
16.10.2016, 16:41
Цитата Сообщение от _SH_ Посмотреть сообщение
Как правильно подставить типы в методе, чтобы решить эту задачку?
никак. Джава такого не позволяет.
0
 Аватар для _SH_
0 / 0 / 0
Регистрация: 28.04.2016
Сообщений: 9
16.10.2016, 16:42  [ТС]
и как тогда решить?)
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
16.10.2016, 16:45
Ты пробовал?
Java
1
2
3
        Number nmbr1 = 1;
        Number nmbr2 = 2;
        System.out.println(nmbr1 + nmbr2);
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
16.10.2016, 16:58
Цитата Сообщение от _SH_ Посмотреть сообщение
и как тогда решить?)
откуда я знаю как вам решать если вы задание не показали
0
 Аватар для _SH_
0 / 0 / 0
Регистрация: 28.04.2016
Сообщений: 9
16.10.2016, 17:01  [ТС]
Цитата Сообщение от vcrop Посмотреть сообщение
Number nmbr1 = 1;
* * * * Number nmbr2 = 2;
* * * * System.out.println(nmbr1 + nmbr2);
) твой код работает только если:
Number nmbr1 = 1;
Number nmbr2 = 2;
System.out.println(nmbr1.doubleValue() + nmbr2.doubleValue());
А вот ответ на свой вопрос я пока так и не получил( Может кто-то все таки знает?

Добавлено через 2 минуты
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
откуда я знаю как вам решать если вы задание не показали
Нужно чтобы принимаемые объекты одного и того же числового типа делились один на другой. Вот и все.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
16.10.2016, 18:49
Цитата Сообщение от _SH_ Посмотреть сообщение
Нужно чтобы принимаемые объекты одного и того же числового типа делились один на другой.
чем вам это в жизни поможет? Делите без этого класса.
0
 Аватар для _SH_
0 / 0 / 0
Регистрация: 28.04.2016
Сообщений: 9
16.10.2016, 19:44  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
чем вам это в жизни поможет? Делите без этого класса.
У меня программа на миллион) и по ней нужно делать то о чем я пишу, или миллион мне не заплатят. Уважаемый KEKCoGEN, прошу Вас не писать ерунду если у Вас ПО СУТИ нет ответа. Спасибо!
0
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
16.10.2016, 21:47
_SH_, тебе нормально отвечают. Вот смотри как можно поизвращаться:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class C<T extends Number> {
    private T o;
    private T o2;
    
    C(T o, T o2){
        this.o = o;
        this.o2 = o2;
        
    }
    
    double getValue (){
        double n1 = Double.valueOf(String.valueOf(o));
        double n2 = Double.valueOf(String.valueOf(o2));
        double number = n1 / n2;
        return number;
    }
    
    public static void main(String[] args) {
        C<Double> objD = new C<>(new Double(1.0), new Double(4.0));
        System.out.println(objD.getValue());
        
        C<Integer> objI = new C<>(new Integer(1), new Integer(8));
        System.out.println(objI.getValue());
    }
}
А знаешь почему метод getValue() возвращает double, а не T как ты хотел? А потому что ты никак не сможешь привести ответ к типу T. А для объектов типа T не предусмотрены операции, которые ты хочешь.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
16.10.2016, 22:04
Цитата Сообщение от _SH_ Посмотреть сообщение
прошу Вас не писать ерунду если у Вас ПО СУТИ нет ответа.
по сути я вам сказал. Джава не поддерживает того, чего вы хотите. Не поддерживает потому что это ненужно, а если вам нужно что-то, что не поддерживается языком, то скорее всего вы что-то делаете неверно.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
16.10.2016, 22:04
striker24, у Вас же не учитывается какого типа данные приходят в метод. Скорее класс лучше было бы переработать примерно так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class C<T extends Number> {
    private T o;
    private T o2;
 
    C(T o, T o2){
        this.o = o;
        this.o2 = o2;
    }
 
    <T extends Number> T getValue(T extNum, T extNum1) {
        T result = null;
        if (extNum == null || extNum1 == null) {
            result = null;
        }
        if (extNum instanceof Double) {
            result = (T) new Double(extNum.doubleValue() / extNum1.doubleValue());
        }
        if (extNum instanceof Integer) {
            result = (T) new Integer(extNum.intValue() / extNum1.intValue());
        }
        return result;
    }
 
    public static void main(String[] args) {
 
        C<Double> objD = new C<>(1.0, 2.0);
        System.out.println(objD.getValue(objD.o, objD.o2));
 
        C<Integer> objI = new C<>(10, 5);
        System.out.println(objI.getValue(objI.o, objI.o2));
    }
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
16.10.2016, 22:09
Цитата Сообщение от HOBATOP Посмотреть сообщение
if (extNum instanceof Double) {
а как насчет остальных 100500 классов расширяющих Number? А если я сам захочу его расширить для своих целей?
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
16.10.2016, 22:16
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
остальных 100500 классов
ну да, придётся для всех проверять, что это такое и как его обработать... Не оптимально, но другого варианта я не вижу...
0
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
16.10.2016, 22:45
HOBATOP,

Не по теме:

воу воу, я бы такой ерундой не стал заниматься:) Я просто в чужой код пару моментов добавил без каких либо серьезный намерений)

0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
16.10.2016, 22:46
Цитата Сообщение от HOBATOP Посмотреть сообщение
ну да, придётся для всех проверять
это не решает вторую проблему когда я передам сюда свой класс, который наследует от Number. Варианты тут искать ненадо. Эта конструкция не решает практической задачи и попросту ненужна.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
16.10.2016, 23:28
Цитата Сообщение от _SH_ Посмотреть сообщение
У меня программа на миллион) и по ней нужно делать то о чем я пишу, или миллион мне не заплатят. Уважаемый KEKCoGEN, прошу Вас не писать ерунду если у Вас ПО СУТИ нет ответа. Спасибо!
Переведи по 100 000 каждому ответившему в этой теме и получишь решение.
0
 Аватар для _SH_
0 / 0 / 0
Регистрация: 28.04.2016
Сообщений: 9
16.10.2016, 23:49  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Переведи по 100 000 каждому ответившему в этой теме и получишь решение.
) Всем большое спасибо за помощь! Остановлюсь на своем варианте:
interface C<T> {
T count(T o, T o2);
}

class C1 {
public static void main(String[] args) {
C<Integer> objI = (Integer o, Integer o2) -> o / o2;
System.out.println(objI.count(new Integer(8), new Integer(4)));

C<Double> objD = (Double o, Double o2) -> o / o2;
System.out.println(objD.count(new Double(16.0), new Double(2.0)));
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2016, 23:49
Помогаю со студенческими работами здесь

Обобщенный класс для числовых типов, ошибка "Incorventible types"
Подскажите как здесь выйти из положения. Округление чисел типа float и double, но я код почистил от лишнего, оставил только ошибку. Эти же...

Метод половинного деления,хорд,ньютона,комбинированный метод
Добрый день. Помогите пожалуйста написать код на Java к функции: X^3 - 50cos(x) с интервалом -4 и 3. Методом Хорд, касательных и Ньютона.

Обобщенный метод преобразовать в метод с параметром типа
Добрый день! Есть метод: public void FillListAndDGV&lt;T&gt;(List&lt;Expression&lt;Func&lt;T, object&gt;&gt;&gt; Expr) where T : class ...

Обобщенный градиентный метод
скиньте пожалуйста полноценный пример или понятную теорию, не могу нагуглить у меня функция двух переменных. нашел алгоритм: 1.найти...

Обобщенный метод сортировки массива
Что-то не пойму, в чем проблема. Точнее, вижу, что мне пишет VS, но не пойму, что делаю не так. Нужно, чтобы метод сортировки принимал...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru