( 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.
私にコードを見せてください!
1クラッセ
1クラッセ
1クラス
エプロトゥラドオプロジェト
Tornarmos Impos s Vel chamar o m To do do PossのためのSEは、Vel chamar o mをtodoにします Executando Novamente o Projeto o Resultado ser
USANOインターフェース
https://github.com/joao0212/avoid-escaping-references https://github.com/joao0212/avoid-escaping-references-engine
私にコードを見せてください!
アンテデEntrarmos na Parte Consiitual、Vamos Conhecer O Cは、digo com que iRemos Trabalharです.徐宝善
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 +
'}';
}
}
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);
}
}
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
. <研究ノート>ペレス・ボスの詩について
/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
//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();
}
setPreco
. setPreco
, チャーダ・イン・デ・シュヴァーティ・エフェト,オウ・セジャ, O・プリュォO ./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.ILivro
エbr.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.reference
Segundo 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ディルディゴ
package br.com.er.interfaces;
public interface ILivro {
String getAutor();
}
//classe ColecaoDeLivros
public ILivro buscarPorAutor(String autor) {
return livros.stream().
filter(livro -> livro.getAutor().contains(autor))
.findAny()
.orElseThrow(RuntimeException::new);
}
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();
}
/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
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 m
br.com.er.collection.ColecaoDeLivros
, br.com.er.interfaces.ILivro
エbr.com.er.model.Livro
. エストラゥーラはM・・・・・Voc - en - deve - ter - parparado que - exium um a novo Arquivo chamado
module-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.reference
Segundo 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 orequires
, 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 c
Principal
, コム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ディルディゴ
Reference
この問題について(( PT - BR ) evitando 'エスケープ参照' COM JPMS), 我々は、より多くの情報をここで見つけました https://dev.to/j_a_o_v_c_t_r/pt-br-evitando-escaping-references-45pbテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol