Chciałbym przypisać zestaw zmiennych w Java, co następuje:Przypisanie zmiennych z dynamicznymi nazwami w języku Java
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Jak mogę to osiągnąć w Java?
Chciałbym przypisać zestaw zmiennych w Java, co następuje:Przypisanie zmiennych z dynamicznymi nazwami w języku Java
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Jak mogę to osiągnąć w Java?
To nie jest sposób, w jaki robisz rzeczy w Javie. W Javie nie ma zmiennych dynamicznych. Zmienne Java muszą być zadeklarowane w kodzie źródłowym (*). Kropka.
W zależności od tego, co próbujesz osiągnąć, powinieneś użyć tablicy, List
lub Map
; na przykład
int n[] = new int[3];
for (int i = 0; i < 3; i++) {
n[i] = 5;
}
List<Integer> n = new ArrayList<Integer>();
for (int i = 1; i < 4; i++) {
n.add(5);
}
Map<String, Integer> n = new HashMap<String, Integer>();
for (int i = 1; i < 4; i++) {
n.put("n" + i, 5);
}
Możliwe jest użycie odbicie dynamicznie patrz zmiennych, które zostały zadeklarowane w kodzie źródłowym. Jednak ten parametr tylko działa dla zmiennych, które są członkami klasy (tj. Polami statycznymi i instancjami). Nie działa dla zmiennych lokalnych. Zobacz przykład "szybki i brudny" @ fyr.
Jednak robienie tego niepotrzebnie w Javie jest złym pomysłem. Jest nieefektywny, kod jest bardziej skomplikowany, a ponieważ polegasz na sprawdzaniu w czasie wykonywania, jest on bardziej kruchy.
A to nie są "zmienne z nazwami dynamicznymi". Jest lepiej opisany dynamiczny dostęp do zmiennych o statycznych nazwach.
* - To stwierdzenie jest nieco niedokładne. Jeśli używasz BCEL lub ASM, możesz "zadeklarować" zmienne w pliku kodu bajtowego. Ale nie rób tego! W ten sposób leży szaleństwo!
Bardzo dużo, dostałem to, czego szukałem. Ostatnia część (mapa
Należy zauważyć, że nawet gdyby było to możliwe, nie powinno to być coś, co faktycznie byś zrobił. Nic z tego nie zyskujesz; stracisz czytelność. Jeśli chcesz je połączyć, zamiast tego użyj 'Map
@JeroenVannevel - To właśnie miałem na myśli przez "szaleństwo" :-) –
Należy użyć List
lub array
zamiast
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Albo
int[] arr = new int[10];
arr[0]=1;
arr[1]=2;
Albo jeszcze lepiej
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Co trzeba nazywa się tablicą. Chciałem napisać następujący kod:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 5;
}
Nie chcesz używać tablic . Chcę dynamicznie uzyskiwać dostęp do zmiennych (n1, n2, n3) w zależności od pewnych warunków. –
Dynamiczne nazw zmiennych w Java
Nie ma czegoś takiego.
W twoim przypadku można użyć tablicy:
int[] n = new int[3];
for() {
n[i] = 5;
}
Dla bardziej ogólnych (name, value)
parach używać Map<>
Spróbuj w ten sposób:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}
Jeśli chcesz uzyskać dostęp do zmiennych niektóre rodzaj dynamiczny możesz użyć refleksji. Jednak Reflection działa nie dla zmiennych lokalnych. Można go stosować tylko w przypadku atrybutów klas.
A rough szybkie i brudne przykładem jest to:
public class T {
public Integer n1;
public Integer n2;
public Integer n3;
public void accessAttributes() throws IllegalArgumentException, SecurityException, IllegalAccessException,
NoSuchFieldException {
for (int i = 1; i < 4; i++) {
T.class.getField("n" + i).set(this, 5);
}
}
}
Trzeba poprawić ten kod na różne sposoby to jest tylko przykładem. Nie jest to również uważane za dobry kod.
Znakomicie, gdy trzeba przekonwertować sensor zdarzenia.values [] na system Android w zestaw zmiennych. event.values [] może mieć długość od 1 do 6 i wygodnie jest go przekonwertować, w moim przypadku na pozbawiony tablic json marshaling. –
Nie musisz. Najbliższą rzeczą, którą możesz zrobić, to pracować z Mapami, aby ją symulować, lub definiować własne Obiekty, z którymi możesz sobie poradzić.
Czy możesz wyjaśnić swoje pytanie? –
Musisz to zrobić dla zmiennych lokalnych? Czemu nie elementy tablicy? –
@ Eng.Fouad: Chcę dynamicznie uzyskiwać dostęp do zmiennych według ich nazwy. –