假設我有兩個變數:
char p1;
char p2;
然后我有一個方法可以根據int引數對其中一個變數執行某些操作:
void someMethod(int number) {
if (number == 1) {
p1 = 'a';
} else {
p2 = 'b';
}
}
這不是很可擴展。
我可以p1/p2通過附加一些字串來參考,例如"p" number?或者任何其他不必if為每個案例單獨撰寫的方法?
uj5u.com熱心網友回復:
您必須使用反射(用于管理類和實體的 Java API)。
試試這個(如果方法和 p1 都在同一個類中,并且你想要在同一個實體中的值)
this.getClass().getDeclaredField("p1").setChar(this, 'a');
另一個不同點是您嘗試使用反射解決的問題是什么。我可以告訴你,反射 API 很少使用,它不應該是日常問題的解決方案。可能你的方法不是最好的。嘗試提出另一個問題來解釋業務問題,而不是您認為正確的解決方案。
uj5u.com熱心網友回復:
嘗試這個。
char[] p = new char[2];
void someMethod(int number) {
if (number == 1) {
p[0] = 'a';
} else {
p[1] = 'b';
}
}
uj5u.com熱心網友回復:
如果您可以控制變數,那么您可以使用陣列 映射邏輯來代替大量變數和條件。假設您有一個陣列和一個映射器:
char[] p = new char[2]; // or "as many as you need"
static Map<Integer, Character> mapper = new HashMap<>();
static {
mapper.put(1, 'a');
mapper.put(2, 'b');
// ... "as many as you need"
}
// number needs to be between 1 and "as many as you need" (inclusive)
void someMethod(int number) {
p[number - 1] = mapper.get(number);
}
但是如果您的映射是線性的 1->a, 2->b, 26->z 那么您甚至不需要映射器,因為您可以即時計算相應的字符。
static char[] p = new char[26];
static {
for(int i = 0; i < 26; i ) {
p[i] (char) (i (int) 'a');
}
}
話雖如此,您可能正在努力實作目標。
- 您的示例看起來不像 Java
- 從邏輯上講,您的示例并沒有取得多大成就
uj5u.com熱心網友回復:
我認為您應該使用以下內容:
if (number > 0 && number < 27)
p = Character.toString(96 number);
97 是大寫字母 A (A) 的 ASCII 碼 小寫字母 (a) 可以使用類似的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/345764.html
標籤:爪哇
