Linguagem Java: JVM, POO Avançada, Generics e Streams
Instruções Gerais:
- Resolva as atividades em ordem progressiva de maturidade.
- Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
- Consulte o gabarito comentado ao final de cada questão para autoavaliação.
🎯 Nível 1: Fundamentos
Problema 05.1 — Hierarquia de Classes, Herança e Polimorfismo em Java
Contexto: Hierarquia de Classes, Herança e Polimorfismo em Java no contexto de Linguagem Java: JVM, POO Avançada, Generics e Streams.
Requisitos de Execução:
- Criar classe base abstrata
Funcionariocom métodocalcularBonus()sobrescrito emGerente.
Resultado Esperado
Polimorfismo de métodos executado na JVM.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_1_SeuNome - Envie na tarefa:
Atividade Cap 05 - Linguagem Java: JVM, POO Avançada, Generics e Streams
🔑 Gabarito de Código & Solução Comentada
abstract class Funcionario {
protected double salario;
public Funcionario(double s) { this.salario = s; }
public abstract double calcularBonus();
}
class Gerente extends Funcionario {
public Gerente(double s) { super(s); }
@Override public double calcularBonus() { return this.salario * 0.20; }
}
public class Main {
public static void main(String[] args) {
Funcionario g = new Gerente(8000.0);
System.out.println("Bonus do Gerente: R$ " + g.calcularBonus());
}
}
🔍 Nível 2: Prática
Problema 05.2 — Programação Funcional com Java Streams API e Lambdas
Contexto: Programação Funcional com Java Streams API e Lambdas no contexto de Linguagem Java: JVM, POO Avançada, Generics e Streams.
Requisitos de Execução:
- Filtrar lista de salários acima de 5000, aplicar aumento de 10% e somar o total.
Resultado Esperado
Processamento funcional de coleções com Streams.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_2_SeuNome - Envie na tarefa:
Atividade Cap 05 - Linguagem Java: JVM, POO Avançada, Generics e Streams
🔑 Gabarito de Código & Solução Comentada
import java.util.List;
public class StreamsDemo {
public static void main(String[] args) {
List<Double> salarios = List.of(3000.0, 6000.0, 8500.0);
double total = salarios.stream()
.filter(s -> s > 5000.0)
.mapToDouble(s -> s * 1.10)
.sum();
System.out.println("Total processado via Streams: R$ " + total);
}
}
⚡ Nível 3: Integração
Problema 05.3 — Java Records Modernos com Validação Compacta
Contexto: Java Records Modernos com Validação Compacta no contexto de Linguagem Java: JVM, POO Avançada, Generics e Streams.
Requisitos de Execução:
- Modelar imutabilidade com
record Cliente(String cpf, String nome, String email).
Resultado Esperado
DTO imutável com métodos `equals`, `hashCode` e `toString` gerados automaticamente.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_3_SeuNome - Envie na tarefa:
Atividade Cap 05 - Linguagem Java: JVM, POO Avançada, Generics e Streams
🔑 Gabarito de Código & Solução Comentada
public class RecordDemo {
public record Cliente(String cpf, String nome, String email) {
public Cliente {
if (cpf == null || cpf.isBlank()) throw new IllegalArgumentException("CPF obrigatorio");
}
}
public static void main(String[] args) {
Cliente c = new Cliente("123.456.789-00", "Carlos Silva", "carlos@empresa.com");
System.out.println("Cliente Record instanciado: " + c.nome());
}
}
🏆 Nível 4: Desafio Corporativo
Problema 05.4 — Concorrência Massiva com Virtual Threads (Project Loom)
Contexto: Concorrência Massiva com Virtual Threads (Project Loom) no contexto de Linguagem Java: JVM, POO Avançada, Generics e Streams.
Requisitos de Execução:
- Executar 10.000 tarefas concorrentes utilizando
Executors.newVirtualThreadPerTaskExecutor().
Resultado Esperado
Concorrência de alto throughput com Virtual Threads no Java 21+.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_4_SeuNome - Envie na tarefa:
Atividade Cap 05 - Linguagem Java: JVM, POO Avançada, Generics e Streams
🔑 Gabarito de Código & Solução Comentada
import java.util.concurrent.Executors;
public class VirtualThreadsDemo {
public static void main(String[] args) {
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 1; i <= 5; i++) {
final int id = i;
executor.submit(() -> {
System.out.println("Virtual Thread " + id + " executando em tarefa leve.");
});
}
}
System.out.println("Todas as Virtual Threads concluidas com sucesso.");
}
}