«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Советы по борьбе с грубыми типами и устаревшим кодом

Советы по борьбе с грубыми типами и устаревшим кодом

Опубликовано в 2025-04-17
Просматривать:980

Tipos brutos e código legado

Gross Types были введены в совместимость между кодами Legacy (до генерического) и генериками, введенными в JDK 5. Они включают постепенный переход, но ставят под угрозу типы .

определения и характеристики ] Gross Type:
]

]
    используйте общий класс без указания аргументов типа. Пример:
  • ]
  • ]
gen raw = new Gen (New Double (98.6)); // созданный грубый тип
Gen raw = new Gen(new Double(98.6)); // Tipo bruto criado

Совместимость:

переменные валового типа могут получить любой универсальный объект и наоборот.

] В времени компиляции нет проверки типов, что приводит к возможным ошибкам во время выполнения.
]

пример кода ]
]

// Gen Class с общей поддержкой класс Gen { T ob; // объявляет объект типа t Gen (t O) {// Конструктор OB = O; } T getOb () {// возвращает объект OBS Вернуть OB; } } // демонстрация валовых типов Класс rawdemo { Public static void main (string [] args) { // правильно использовать дженерики Gen iob = new Gen (88); Gen strob = new Gen ("test Generics"); // Создание валового типа Gen Raw = New Gen (новый Double (98,6)); Double D = (Double) RAW.GETOB (); // работает, но теряет безопасность типа System.out.println ("Значение:" D); // ошибки времени выполнения с валовыми типами // int i = (integer) raw.getOb (); // Ошибка времени выполнения! // назначение валового типа для общего Strob = RAW; // Правильно, но опасно // string str = strob.getOb (); // Ошибка времени выполнения! // общая валовая атрибуция RAW = IOB; // Правильно, но опасно // d = (Double) raw.getOb (); // Ошибка времени выполнения! } }
// Classe Gen com suporte a genéricos
class Gen {
    T ob; // Declara um objeto do tipo T

    Gen(T o) { // Construtor
        ob = o;
    }

    T getob() { // Retorna o objeto ob
        return ob;
    }
}

// Demonstração de tipos brutos
class RawDemo {
    public static void main(String[] args) {
        // Usando genéricos corretamente
        Gen iOb = new Gen(88);
        Gen strOb = new Gen("Generics Test");

        // Criando um tipo bruto
        Gen raw = new Gen(new Double(98.6));
        double d = (Double) raw.getob(); // Funciona, mas perde segurança de tipos
        System.out.println("value: "   d);

        // Erros de tempo de execução com tipos brutos
        // int i = (Integer) raw.getob(); // Erro de tempo de execução!

        // Atribuição de tipo bruto para genérico
        strOb = raw; // Correto, mas perigoso
        // String str = strOb.getob(); // Erro de tempo de execução!

        // Atribuição de genérico para tipo bruto
        raw = iOb; // Correto, mas perigoso
        // d = (Double) raw.getob(); // Erro de tempo de execução!
    }
}

риски использования грубых типов ]
отсутствие типа Security: ]

]
    назначение валовых типов генерику или наоборот может вызвать ошибки во время выполнения.
  • ]
  • ]
Примеры:


]

strob = raw; // опасно: RAW содержит двойной, но Strob ждет строки RAW = IOB; // опасно: RAW теперь содержит целое число, но принуждение может пройти
// Classe Gen com suporte a genéricos
class Gen {
    T ob; // Declara um objeto do tipo T

    Gen(T o) { // Construtor
        ob = o;
    }

    T getob() { // Retorna o objeto ob
        return ob;
    }
}

// Demonstração de tipos brutos
class RawDemo {
    public static void main(String[] args) {
        // Usando genéricos corretamente
        Gen iOb = new Gen(88);
        Gen strOb = new Gen("Generics Test");

        // Criando um tipo bruto
        Gen raw = new Gen(new Double(98.6));
        double d = (Double) raw.getob(); // Funciona, mas perde segurança de tipos
        System.out.println("value: "   d);

        // Erros de tempo de execução com tipos brutos
        // int i = (Integer) raw.getob(); // Erro de tempo de execução!

        // Atribuição de tipo bruto para genérico
        strOb = raw; // Correto, mas perigoso
        // String str = strOb.getob(); // Erro de tempo de execução!

        // Atribuição de genérico para tipo bruto
        raw = iOb; // Correto, mas perigoso
        // d = (Double) raw.getob(); // Erro de tempo de execução!
    }
}

исключения во время исполнения: ]

нет способа обнаружить несоответствия во время компиляции.

] Пример:

]

int i = (integer) raw.getOb (); // Ошибка почему RAW содержит двойной
// Classe Gen com suporte a genéricos
class Gen {
    T ob; // Declara um objeto do tipo T

    Gen(T o) { // Construtor
        ob = o;
    }

    T getob() { // Retorna o objeto ob
        return ob;
    }
}

// Demonstração de tipos brutos
class RawDemo {
    public static void main(String[] args) {
        // Usando genéricos corretamente
        Gen iOb = new Gen(88);
        Gen strOb = new Gen("Generics Test");

        // Criando um tipo bruto
        Gen raw = new Gen(new Double(98.6));
        double d = (Double) raw.getob(); // Funciona, mas perde segurança de tipos
        System.out.println("value: "   d);

        // Erros de tempo de execução com tipos brutos
        // int i = (Integer) raw.getob(); // Erro de tempo de execução!

        // Atribuição de tipo bruto para genérico
        strOb = raw; // Correto, mas perigoso
        // String str = strOb.getob(); // Erro de tempo de execução!

        // Atribuição de genérico para tipo bruto
        raw = iOb; // Correto, mas perigoso
        // d = (Double) raw.getob(); // Erro de tempo de execução!
    }
}

не -верификационные уведомления: ]

]
    компилятор Javac генерирует предупреждения, когда он обнаруживает, что валовые типы, используемые небезопасными.
  • ]
  • ]
примеры, которые генерируют предупреждения

]
]

gen raw = new Gen (New Double (98.6)); // валовой тип Strob = RAW; // небезопасное назначение
// Classe Gen com suporte a genéricos
class Gen {
    T ob; // Declara um objeto do tipo T

    Gen(T o) { // Construtor
        ob = o;
    }

    T getob() { // Retorna o objeto ob
        return ob;
    }
}

// Demonstração de tipos brutos
class RawDemo {
    public static void main(String[] args) {
        // Usando genéricos corretamente
        Gen iOb = new Gen(88);
        Gen strOb = new Gen("Generics Test");

        // Criando um tipo bruto
        Gen raw = new Gen(new Double(98.6));
        double d = (Double) raw.getob(); // Funciona, mas perde segurança de tipos
        System.out.println("value: "   d);

        // Erros de tempo de execução com tipos brutos
        // int i = (Integer) raw.getob(); // Erro de tempo de execução!

        // Atribuição de tipo bruto para genérico
        strOb = raw; // Correto, mas perigoso
        // String str = strOb.getob(); // Erro de tempo de execução!

        // Atribuição de genérico para tipo bruto
        raw = iOb; // Correto, mas perigoso
        // d = (Double) raw.getob(); // Erro de tempo de execução!
    }
}

рекомендации ] Избегайте использования грубых типов:
]

]
    всегда используйте аргументы типа, чтобы получить безопасность, предлагаемую Generics.
  • ]
  • ]
Пример:


]

Gen iob = new Gen (88); // Правильно и безопасно
// Classe Gen com suporte a genéricos
class Gen {
    T ob; // Declara um objeto do tipo T

    Gen(T o) { // Construtor
        ob = o;
    }

    T getob() { // Retorna o objeto ob
        return ob;
    }
}

// Demonstração de tipos brutos
class RawDemo {
    public static void main(String[] args) {
        // Usando genéricos corretamente
        Gen iOb = new Gen(88);
        Gen strOb = new Gen("Generics Test");

        // Criando um tipo bruto
        Gen raw = new Gen(new Double(98.6));
        double d = (Double) raw.getob(); // Funciona, mas perde segurança de tipos
        System.out.println("value: "   d);

        // Erros de tempo de execução com tipos brutos
        // int i = (Integer) raw.getob(); // Erro de tempo de execução!

        // Atribuição de tipo bruto para genérico
        strOb = raw; // Correto, mas perigoso
        // String str = strOb.getob(); // Erro de tempo de execução!

        // Atribuição de genérico para tipo bruto
        raw = iOb; // Correto, mas perigoso
        // d = (Double) raw.getob(); // Erro de tempo de execução!
    }
}

] добавьте строгие проверки и тесты, интегрируя предварительный генерал с общим кодом. ]

]
    ]
  • ]
Заявление о выпуске Эта статья воспроизводится по адресу: https://dev.to/javaparainiciantes/tipos-broutos-e-codigo-legado-3c6m?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с исследованием[email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3