2017-11-03 3 views
0

Meine Aktivität Snippet:Annotation Lib, die mit privaten Feldern arbeitet?

import butterknife.BindView; 
import butterknife.ButterKnife; 

public class DetailsActivity extends AppCompatActivity { 
    @BindView(R.id.productTitleTextView) 
    TextView productTitleTextView; 

@Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.shopping_details); 
     ButterKnife.bind(this); 
     productTitleTextView.setText("Hello"); 
} 

OK. Es funktioniert gut.

Aber ich denke, dies verletzt Kapselung, weil Felder nicht privat sind. Ich möchte nicht, dass jemand über die inneren Aktivitäten informiert.

So sollte die ideale Lösung somehing so aussehen:

@BindView(R.id.productTitleTextView) 
private TextView productTitleTextView; 

Die Frage ist:

Hat Android Anmerkung lib, die dies tun können?

Antwort

0

Sie können nicht nicht privat sein, weil es sonst nicht darauf zugreifen können. generiert einen Code für Sie, der den Code enthält, den Sie nicht für Sie schreiben möchten. Was sie tut, wenn Sie ButterKnife.bind(this) schreiben, wo dies in diesem Fall ist Ihre Activity, versucht jedes kommentierte Mitglied für den Zugriff auf die Referenz Trog bereitgestellt und ein findViewById mit ausdrücklicher Besetzung zu tun. Wenn das Mitglied privat ist, kann es nicht zugegriffen werden (Basis-Java).

+0

Vielleicht hat eine andere Annotation lib? – Alexei

+0

Die meisten Bibliotheken, mit denen ich gearbeitet habe, damit die Felder öffentlich sind, haben Zugang zu ihnen. Wenn Sie sie für andere Objekte ausblenden, rate ich Ihnen, findViewById zu verwenden –

Verwandte Themen