AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-13963086

k314159's questions

Martin Hope
k314159
Asked: 2025-02-28 17:37:40 +0800 CST

Classe de dados Kotlin com parâmetro construtor padrão

  • 6

Quero usar uma classe de dados com uma propriedade que tenha um valor padrão no construtor com base em outro parâmetro do construtor. Funciona exatamente como eu quero se eu usar uma classe normal (não de dados):

import java.time.Clock
import java.time.Instant

class MyObject(
    clock: Clock = Clock.systemUTC(),
    val name: String,
    val timeCreated: Instant = clock.instant()
)

fun main() {
    val a = MyObject(name = "Fred")
    println(a.timeCreated)
}

Mas se eu tentar fazer um data class, ele não compila:

Primary constructor of data class must only have property ('val' / 'var') parameters.

Não quero que o clockparâmetro seja uma propriedade, pois ele é usado apenas para testes. Mas quero que a classe seja a data classcom seu autogerado toString, copye outros recursos. O que posso fazer?

kotlin
  • 1 respostas
  • 19 Views
Martin Hope
k314159
Asked: 2025-02-19 21:18:50 +0800 CST

Substituir uma única propriedade para todos os testes

  • 5

Tenho um conjunto de propriedades em src/main/resources/application.properties:

app.firstprop=2
app.secondprop=3
app.thirdprop=5
app.fourthprop=7

E eu quero substituir app.secondproptodos os meus testes, mantendo as propriedades restantes inalteradas. Uma opção é:

@SpringBootTest(properties=["app.secondprop=99"])

mas isso significa que tenho que repetir esse valor de propriedade em cada arquivo de teste.

Outra opção é usar src/test/resources/application.propertiespara sobrescrever meu arquivo de propriedades. Infelizmente, tenho que especificar todas as propriedades inalteradas, bem como a propriedade sobrescrita:

app.firstprop=2
app.secondprop=99
app.thirdprop=5
app.fourthprop=7

Se eu não especificar as propriedades inalteradas, elas não serão definidas durante os testes. Isso novamente é uma repetição indesejada.

Como posso substituir uma única propriedade para todos os testes e manter o princípio DRY?

java
  • 2 respostas
  • 54 Views
Martin Hope
k314159
Asked: 2024-12-04 19:19:43 +0800 CST

O JRE 23 roda muito mais rápido que as versões anteriores

  • 14

Estou tentando o seguinte código para verificação de desempenho. Ele é puramente limitado pela CPU, faz muitos cálculos em doubletipos, single-threaded e não usa nenhum heap:

public class PerfTestSampleJ {
    private static final int MEASURE_COUNT = 5;
    private static final int ITERATIONS = 100_000_000;

    public static void main(String[] args) {
        var minTime = Long.MAX_VALUE;
        for (int i = 1; i <= MEASURE_COUNT; i++) {
            long start = System.nanoTime();
            double pi = calculatePi(ITERATIONS);
            long time = System.nanoTime() - start;
            System.out.printf("Iteration %2d took %8.3f ms%n", i, time / 1e6);
            if (time < minTime) {
                minTime = time;
            }
            if (Math.abs(pi - Math.PI) > 1e-14)
                throw new AssertionError(pi + " (" + (pi - Math.PI) + ")");
        }
        System.out.printf("Minimum time taken: %8.3f ms%n", minTime / 1e6);
    }

    private static double calculatePi(int iterations) {
        double pi = 0.0;
        double numerator = 4.0;
        for (int i = 1; i <= iterations; i++) {
            double n = i * 2.0;
            double denominator = n * (n + 1) * (n + 2);
            pi += numerator / denominator;
            numerator = -numerator;
        }
        return 3 + pi;
    }
}

Agora, usando o mesmo arquivo de classe compilado, compare os resultados ao executar no JRE 21 versus JRE 23:

/usr/lib/jvm/jdk-21.0.5-oracle-x64/bin/java PerfTestSampleJ
Iteration  1 took  801.058 ms
Iteration  2 took  798.392 ms
Iteration  3 took  414.688 ms
Iteration  4 took  413.959 ms
Iteration  5 took  416.867 ms
Minimum time taken:  413.959 ms

/usr/lib/jvm/jdk-23.0.1-oracle-x64/bin/java PerfTestSampleJ
Iteration  1 took  193.654 ms
Iteration  2 took  186.790 ms
Iteration  3 took  102.963 ms
Iteration  4 took  103.226 ms
Iteration  5 took  102.869 ms
Minimum time taken:  102.869 ms

Em cada execução, há uma fase de aquecimento nas duas primeiras iterações, mas a partir da iteração 3 é o mais rápido possível.

O que mudou no Java 23 para tornar isso mais rápido? Ao olhar as notas de lançamento, tudo o que consigo encontrar sobre desempenho são melhorias no coletor de lixo. Mas não estamos usando o heap aqui, então a melhoria do coletor de lixo é irrelevante.

PS Os resultados acima são no Ubuntu Linux x64 usando um processador i7. Obtenho os mesmos resultados usando versões Temurin. Além disso, tentei Oracle JRE 22 vs 23 no Windows x64 com resultados semelhantes, mostrando que a diferença de desempenho está entre 22 e 23.

java
  • 1 respostas
  • 107 Views
Martin Hope
k314159
Asked: 2024-11-07 22:35:45 +0800 CST

Kotlin varargs para array

  • 6

Há uma função que desejo chamar em uma biblioteca de terceiros:

fun foo(strings: Array<String>)

O array stringsé usado apenas para leitura, ou seja, foonão grava nele.

Agora, quero escrever uma função minha, assim:

fun bar(vararg vstrings: String) {
    do some things...
    foo(vstrings)
    do some more things...
}

Mas a foo(vstrings)chamada resulta em um erro de compilação:argument type mismatch: actual type is 'Array<CapturedType(out String)>', but 'Array<String>' was expected.

Não consigo alterar a assinatura de foo. Como posso passar esse parâmetro vararg como um array?

kotlin
  • 1 respostas
  • 36 Views
Martin Hope
k314159
Asked: 2024-05-29 22:00:47 +0800 CST

Último elemento da sequência, mas com uma quebra se uma condição for atendida

  • 7

Digamos que eu tenha uma Sequence<Int>origem desconhecida (não necessariamente de uma coleção) e de tamanho desconhecido, mas finito:

val seq = sequenceOf(1, 2, -3, 4, 5, /* ... */)

Suponha que a sequência seja grande o suficiente para tornar indesejável transformar toda a sequência em um arquivo List.

Quero obter o último elemento da sequência:

val last = seq.last()

Mas também quero capturar qualquer elemento "inválido" que possa aparecer (digamos que números negativos sejam inválidos) e retornar o primeiro elemento:

val invalid = seq.first { it < 0 }

Mas como posso fazer as duas coisas ao mesmo tempo?

val lastUnlessInvalidElementPresent = seq.firstOrNull { it < 0 } ?: seq.last()

O problema é que ?: seq.last()não funciona porque quando o tempo firstOrNullretorna nulo, toda a sequência já foi consumida.

Posso fazer isso iterativamente, mas preferiria uma solução funcional.

kotlin
  • 4 respostas
  • 38 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve