👉 기본 환경
- Language: Java
- IDE: Eclipse
⌨️ 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < N; i++) {
String s = br.readLine();
map.put(s, s.length());
}
String[] mapKeys = (String[]) map.keySet().toArray();
Arrays.sort(mapKeys);
List<Object> keys = new ArrayList<>();
for (Object key : mapKeys) {
keys.add(key);
}
Collections.sort(keys, ((k1, k2) -> (map.get(k1).compareTo(map.get(k2)))));
for (Object key : keys) {
bw.write(key + "\n");
}
bw.flush();
bw.close();
}
}
|
🖨️오류
java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; ([Ljava.lang.Object; and [Ljava.lang.String; are in module java.base of loader 'bootstrap')
📡 원인
Object[]를 String[]로 바로 형변환 할 수 없음
📰 해결 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < N; i++) {
String s = br.readLine();
map.put(s, s.length());
}
String[] mapKeys = map.keySet().toArray(new String[0]);
Arrays.sort(mapKeys);
List<Object> keys = new ArrayList<>();
for (Object key : mapKeys) {
keys.add(key);
}
Collections.sort(keys, ((k1, k2) -> (map.get(k1).compareTo(map.get(k2)))));
for (Object key : keys) {
bw.write(key + "\n");
}
bw.flush();
bw.close();
}
}
|
String[] mapKeys = map.keySet().toArray(new String[0]);
- Object[]를 String[]을 형변환하는 것이 아닌 개별 요소를 String으로 직접 지정하고 String[]에 저장
- 요소 타입을 명시적으로 지정하면 map.keySet()에서 반환되는 요소들을 mapeys 배열에 복사
+ 배열의 크기를 0으로 지정한 이유
- 실제 반환될 배열의 크기를 동적으로 조절하고자 0으로 지정
- 컬렉션의 크기에 맞게 배열이 자동으로 생성되고 요소들이 복사되기 때문에 정확한 크기를 예측하거나 관리할 필요가 없음
+ String[] mapKeys = map.keySet().toArray(String s); 가 안되는 이유
- toArray()의 매개변수는 T[] a이므로 배열을 전달하여 요소 타입을 추론하게 해야 함
📚 참고 자료
'Java > Java with Error' 카테고리의 다른 글
[해결 방법] no suitable constructor found for Jackson2JsonRedisSerializer(Class<CAP#1>) (0) | 2024.11.24 |
---|---|
[해결 방법] error: no suitable method found for ... (0) | 2023.10.17 |
[해결 방법] Syntax error (0) | 2023.08.09 |
[해결 방법] java.lang.Error (0) | 2023.08.09 |
[해결 방법] java.lang.Error (0) | 2023.06.06 |