( PT - BR ) evitando 'エスケープ参照' COM JPMS


muitas vezes、quando estamos desenvolvendo nossosのソフトウェアは、nは、percebemos possは、veisのバグque est est o o sendoのindidosなしcのdigo.Altamente impactadoに対する探索の試みIdeia Desteポストapapentar um dess問題、chamadoエスケープ参照、e possは、veis soluのseをes.

私にコードを見せてください!


アンテデEntrarmos na Parte Consiitual、Vamos Conhecer O Cは、digo com que iRemos Trabalharです.徐宝善
  • 1クラッセLivro , リューロの『レプネータ』について
  • package br.com.er.model;
    public class Livro {
    
        public Livro(Long id, String nome, String autor, Double preco) {
            this.id = id;
            this.nome = nome;
            this.autor = autor;
            this.preco = preco;
        }
    
        private final Long id;
        private final String nome;
        private final String autor;
        private Double preco;
    
        public String getAutor() { return autor; }
    
        public void setPreco(Double preco) { this.preco = preco; }
    
        @Override
        public String toString() {
            return "Livro{" +
                    "id=" + id +
                    ", nome='" + nome + '\'' +
                    ", autor='" + autor + '\'' +
                    ", preco=" + preco +
                    '}';
        }
    }
    
  • 1クラッセColecaoDeLivros レヴェンズヴェルPor fornecer馬リナデlivros e alguns comportamentosパラシュートで降下してください.
  • package br.com.er.collection;
    //imports omitidos
    public class ColecaoDeLivros {
    
        public List<Livro> livros;
    
        public ColecaoDeLivros() {
            livros = List.of(
                    new Livro(1L, "Clean Code", "Uncle Bob", 119.99)
            );
        }
    
        public void mostrarLivros() {
            livros.forEach(System.out::println);
        }
    
        public Livro buscarPorAutor(String autor) {
            return livros.stream().
                    filter(livro -> livro.getAutor().contains(autor))
                    .findAny()
                    .orElseThrow(RuntimeException::new);
        }
    }
    
  • 1クラスPrincipal ヴェルPorエグゼクタウオc c didi digo.
  • package br.com.er;
    import br.com.er.collection.ColecaoDeLivros;
    public class Principal {
    
        public static void main(String... x) {
    
            ColecaoDeLivros cl = new ColecaoDeLivros();
    
            cl.mostrarLivros();
            System.out.println(cl.buscarPorAutor("Uncle Bob"));
    
        }
    }
    

    エプロトゥラドオプロジェト


    o c c didacgo acima est 100 % funcional e podemos garantir isso executando a a nssa classePrincipal .
    Intellij ide usadaパラexecutar o c dididigo
    /Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=50174:/Applications/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/jv.martins/Documents/workspace/avoid-escaping-reference/out/production/avoid-escaping-reference br.com.er.Principal
    Livro{id=1, nome='Clean Code', autor='Uncle Bob', preco=119.99}
    Livro{id=1, nome='Clean Code', autor='Uncle Bob', preco=119.99}
    
    Process finished with exit code 0
    
    Vamos fazer ma pequena変則Principal .
    //resto do código omitido
    public static void main(String... x) {
    
            ColecaoDeLivros cl = new ColecaoDeLivros();
    
            cl.mostrarLivros();
            cl.buscarPorAutor("Uncle Bob").setPreco(0.0);
            cl.mostrarLivros();
        }
    
    コモPodemosオブザーバー、O msetPreco ダクラスLivro チャドドゥエドアールオウムエド藤堂buscarPorAutor ダクラスColecaoDeLivros . オーソドレンポルノO retornoデbuscarPorAutor ミューズLivro . <研究ノート>ペレス・ボスの詩について
  • Tornarmos Impos s Vel chamar o m To do dosetPreco .
  • PossのためのSEは、Vel chamar o mをtodoにしますsetPreco , チャーダ・イン・デ・シュヴァーティ・エフェト,オウ・セジャ, O・プリュォO .
  • Executando Novamente o Projeto o Resultado ser
    /Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=50116:/Applications/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/jv.martins/Documents/workspace/avoid-escaping-reference/out/production/avoid-escaping-reference br.com.er.Principal
    Livro{id=1, nome='Clean Code', autor='Uncle Bob', preco=119.99}
    Livro{id=1, nome='Clean Code', autor='Uncle Bob', preco=0.0}
    
    Process finished with exit code 0
    
    コモNは、oデveria ser possを解きます.そして、外へのベルを見ます.参照をエスケープしている例のエレ.Estamos Mudando O Atributo de um Tipo , Atrav es ' s retorno do m ' t todo de um outro tipoとしてのパラエーカーデacordo com、vamos alterar nosso csetPreco .

    USANOインターフェース


    Primeiraオペアンプは、oの問題を回避しますLivro ペポア・アパナスオス
    package br.com.er.interfaces;
    
    public interface ILivro {
        String getAutor();
    } 
    
    アゴラtrocaremos o retorno do mbuscarPorAutor PERAインタフェース
    //classe ColecaoDeLivros
    
    public ILivro buscarPorAutor(String autor) {
            return livros.stream().
                    filter(livro -> livro.getAutor().contains(autor))
                    .findAny()
                    .orElseThrow(RuntimeException::new);
        }
    
    エッセA ' s ' o ' s ser ' o ser o o suficienteパラオo c c dio n o o o oコンパイラ

    <研究ノート>東南アジア諸国におけるアゴラとその周辺setPreco . Afirmativaの前Seria Totalmente verdadeira se n o o houvesse uma maneira de fazer o鋳造物ILivro パラLivro .
    public static void main(String... x) {
    
            ColecaoDeLivros cl = new ColecaoDeLivros();
    
            cl.mostrarLivros();
            ILivro livro = cl.buscarPorAutor("Uncle Bob");
            Livro livroConvertido = (Livro) livro;
            livroConvertido.setPreco(0.0);
            cl.mostrarLivros();
        }
    
    ポドモノ天文台que o caminhoパラchamar o msetLivro Ficou Mais difは、Cal、Masn - Astro o Impossを引きます.<研究ノート> C .ディゴー・アシーマの研究
    /Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=49798:/Applications/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/jv.martins/Documents/workspace/avoid-escaping-reference/out/production/avoid-escaping-reference br.com.er.Principal
    Livro{id=1, nome='Clean Code', autor='Uncle Bob', preco=119.99}
    Livro{id=1, nome='Clean Code', autor='Uncle Bob', preco=0.0}
    
    Process finished with exit code 0
    
    Mas Eent Astro o n n o Temos - uma - maneira de evitar defintivameness sess参照をエスケープする?<研究ノート>第二次大戦後の外国人労働者の就労意識

    USADO JPMS ( Javaプラットフォームモジュールシステム)


    JPMS Ed - uma機能は、Java que teve como objetivo modularizarをJDKにします.Dentre OSのseus vは、riisのbenefは、Cios、um delesはforforer um melhorのカプセル化dos nossosのコンポーネントを意味する.Nessa SEの遺言書はO iRemos利用者EPAのEviitar oの問題をエスケープします.
    Primeiro Passo ' s Separar A Aplica Speciém O em m Dulos e Definir quais class ficarクラスとしてのパラオnosso典型的な、vamos definir o primeiro mbr.com.er.collection.ColecaoDeLivros , br.com.er.interfaces.ILivrobr.com.er.model.Livro . エストラゥーラはM・・・・・

    Voc - en - deve - ter - parparado que - exium um a novo Arquivo chamadomodule-info.java . エステArquivoエヌAress Voリオリオコンパイラは、Aplica Specium o e e Nele es possを得ます.Podemos Definir Queue Componentes Queemo que a fora do m Do Dulo , Fortalecendo O Encapsulamento a a aplica Sprenoo O e Podemos Definir Quais m des dulos queremos usar dentro do m dulo em que estamos trabalhandoパラエンエンダーMelhor、Vamos Verificar Oコンテは、アルカイボを行う.
    module avoid.escaping.reference {
    
        exports br.com.er.collection;
        exports br.com.er.interfaces;
    }
    
    パリヴァmodule サー・パラディニー・ソレイ・ア・ドゥm・・・Dulo、que foi nomeadoデavoid.escaping.reference . OSは、情報をQUAIS Pacotes Serをexoにエクスポートします.オストロ・パロテ・フォアにおけるオスカー・パロテavoid.escaping.referenceSegundo m - de Dulo Possuir - a a a a a a a a a se a a sePrincipal E SERは、呼吸を引きます.

    o mのduloデexecuは、oに依存しますavoid.escaping.reference Eエッセは、NCIAを意味しますmodule-info .
    module avoid.escaping.reference.engine {
    
        requires avoid.escaping.reference;
    }
    
    

    É importante chamar atenção para um ponto. Quando utilizamos o export, nós estamos fazendo a exportação dos pacotes (pacote por pacote) que podem ser utilizados fora do módulo. Quando utilizamos o requires, nós estamos requerendo o módulo como um todo e teremos acesso a todos os recursos que foram exportados do outro módulo.


    Limo Potonパラシュートで降下する人Aplicaを得てくださいavoid.escaping.reference.engine , O m . duloavoid.escaping.reference .
    コンフィギュレーションとしてのCOM todasは、es realizadas、vamos tentar executar o cPrincipal , コムoキャスティングリアライズ

    o o c c dio apresenta erro deコンパイラーの部分Livro ドゥーMドゥーavoid.escaping.reference , 耳鼻咽喉科領域avoid.escaping.reference.engine ) エサクラス.エサAbordagem、torimos impossは、ベルをしますsetPreco E Alcanは、エーモスO objetivo決勝です.

    結論付ける


    Piccebemos Cheitadosのポストの問題は、ポストn n o o s s o o sempref e - se ceoデアイデンティティのe o cen are rio piora porque nem toda soluの巣を意味します.USOデインターフェース, em Aluns cen are rios , funciona perfeitamente , pois o que fizemos para for a ar ar o cast , n .J ' seパラOutros Projetos、O JPMSは、MelhorオペPlavéo o、ポルノGarante oカプセル化されたo o o o o o o o o o o o o o o o u o o m m o duloです.escolha vai従属者da必要なeは、projetoをします.クスクスdは、vida、批判e sugestのhenes es、estou -します.
    O o Cディルディゴ
  • https://github.com/joao0212/avoid-escaping-references
  • https://github.com/joao0212/avoid-escaping-references-engine