2016-09-09 1 views

答えて

0

属性がpublicの場合、このようにアクセスできます。あなたの属性がprotectedの場合、そのクラスはあなたのクラスと同じパッケージになければなりません。

obj.value = newValue; 

それはあなたがrefelctionでそれを行うことができますprivateです。

+0

私はこれが本当のことではないと思っています。あなたは他のスコープでもそれを行うことができますが、それはどこに値を設定しているかによって異なります(クラスメソッドなど) – Mikel

+0

ありがとう、私はそれを更新しました – Huntro

3

あなたは、メソッドの内部で、のように、クラス自体にあり、変数は、この使用し、その後、privatepublic、またはprotectedをマークされている場合:フィールドがpublicある場合

m_name = value; 

を、そしてあなたクラス外部からのアクセスを必要とし、その後、実行します。もちろん

classinstance.m_name = value; 

を使用すると、変数は、クラスのインスタンス化で構築する必要がある場合は、コンストラクタ内で、リストのインスタンス化コードを配置する必要があります。その後、再び、あなたはこのようにリフレクションを使用することができます:それは間違いなく、カプセル化を壊すので、

import java.lang.reflect.Field; 
ClassName classInstance = new ClassName(); 
Field member_name = classInstance.getClass().getDeclaredField("private_var_name"); 

// this is for private scope 
member_name.setAccessible(true); 

variableName.set(x, /*value*/); 

はもちろん、私は、上記を行うことはお勧めしません、それは、よりクリーンなコードよりもハックのようになります。

Source

関連する問題