자바


지나치게 장황하다.


자바는 Goto와 Const와 같은 미사용 키워드를 가지고 있다.


연산자 오버러딩이 없다. 따라서 BigInteger와 같은 pseudo-Number 클래스의 경우 a.add (b.multiply (c))와 같은 작업을 수행해야 한다.


Delegates가 없다. 펑션 포인터가 필요할 때마다 팩토리얼 설계를 구현해야 한다.


Array는 General과 동시에 작동하지 않는다. 새로운 가변형 T[42]의 배열을 생성할 수 없으며 새로운 배열을 생성하기 위해서는 배열의 복싱을 수행해야 한다.


속성이 없다. 단순한 클래스를 정의하는데 7-10배의 코드가 필요하다.


배열이나 맵 리터럴이 없다. 배열과 맵은 수집(Collection) 인터페이스다.


로컬 유형을 추론하기 위한 var-Keyword가 없다(C #과 같은). 반(Anti)디자인이며 클래스 이름이 그렇게 길면 안된다.

(ClassWithReallyLongNameAndTypeParameter foo = new ClassWithReallyLongNameAndTypeParameter<>();)

자동 완성, 코드 생성, import 관리 및 리팩토링을 갖춘 IDE없이 Java를 작성하는 것은 불가능하다.


쌍(Pair)이나 삼중항이 없다. 함수에서 두 값을 반환하거나 집합에 한 쌍을 배치하면 새 파일의 새 클래스가 필요하다.


Generic Pair 클래스는 모든 곳에서 hairy이 많은 유형으로 이어진다.


First 함수와 클래스가 없다.


검사된 예외는 Failed Experiment다.


Number Base 클래스는 산술 연산을 정의하지 않기 때문에 Number 하위 클래스에 유용한 제네릭을 작성하는 것은 불가능하다.


Java 8 이전에는 여러 개의 상속을 구현하기 위해 인터페이스만 사용하는 것은 공통 코드를 그들을 통해 공유하는 것을 허용하지 않았다.


표준 라이브러리의 기능은 일관된 이름, 두문자어 및 대문자 규약을 사용하지 않기 때문에 항목이 정확히 기억되기 어렵다.

- 이것은 실제로 표준의 일부로서, 3자 또는 그 이하의 글자가 있으면 모두 대문자로 쓰고, RPGGame과 RpgGame이 아닌 TLSConnection이 있으면 첫 번째 글자로만 쓰지만 Starttls를 사용해야 한다. java.net에는 URLConnection과 HttpURLConnection이 있다. UrlConnection이나 HTTPURLConnection 또는 HttpUrlConnection는 왜 안되는가? ZIPOutputBuffer나 GnuZipOutputBuffer, GzipOutputBuffer 또는 GZipOutputBuffer는 왜 안되는가?


Cloneableclone의 디자인은 엉망이다.


Array는 객체지만 .toString()을 적절하게 구현하지 않는다(배열을 인쇄하려고 하면 해시 코드 gibberish만 인쇄)

또는 .equals() (동일한 내용을 동일하게 취급하지 않아 Array를 집합에 넣으려고 하면 머리가 아프다)


Stack은 왜 클래스이고 Queue는 인터페이스인가?

- 스택은 오래된 컬렉션 API에 속하므로 더 이상 사용해서는 안 된다. 대신 Deque(인터페이스)와 ArrayDeque(implementation)를 사용한다.


코드는 유형 변환으로 어수선하다. Array를 List으로, Array로, java.util로 배열한다.


Date API는 더 이상 사용되지 않는 것으로 간주되지만, 여전히 모든 곳에서 사용된다. 대체된 달력(Calander)은 그렇지 않다.


Reflaction API는 가장 간단한 작동을 위해 복수의 코드 라인을 필요로 한다.


(a|[^d]) 정규식은 긴 문자열에 StackOverflowException 예외가 발생한다.


Unsigned 숫자 유형이 없다


거의 모든 것이 오브젝트로 포장되어 있고, 많은 것들은 반드시 버퍼링되어야 한다. 심지어 실제로 오브젝트가 되거나 버퍼링될 필요가 없는 것들조차도 말이다.


직렬화 및 랜덤 액세스와 같은 일부 인터페이스는 주석처럼 사용된다. 그것들은 비어 있고, 구현될 때 그들의 유일한 목적은 일부 의미론을 표시하는 것이다.


초기화 블록(정적 블록과 정적이 아닌 블록 모두)은 체크된 예외를 둘 수 없다.


Arrays는 안전하지 않다: Object[] foo = new String[1]; foo[0] = new Integer(42); 컴파일하지만 런타임에 실패함


유니코드 이스케이프는 코드 구문 분석 전에 대체되므로 예상치 못한 영향을 미칠 수 있다.


편의 기능은 모든 기본 유형(예: max(float,float), max(double,double), max(long,long)에 대해 과부하되어야 한다.


Node.js 사용자들은 Java 스레드 팩토리는 지원되는 웹 링크를 클릭할 때마다 서버 RAM 프로필에 2MB의 지방을 추가하는 큰 돼지 농장이라고 자바 서버 플랫폼을 끊임없이 비웃는다.


자바가 모든 OS에서 작동하기 때문에 좋다고 말하는 것은 모든 성별에서 가능하기 때문에 항문 섹스가 좋다고 말하는 것과 같다.


정렬, 바이너리 검색 등과 같은 유용한 방법은 컬렉션 클래스의 일부가 아니라 컬렉션과 어레이와 같은 별도의 "유틸리티 클래스"의 일부였다.


Catch 절은 하나의 Exception만 포함할 수 있으며, 프로그래머가 N개의 다른 예외에 동일한 방식으로 반응하기를 원할 경우 동일한 코드를 N번 다시 작성하게 한다.