Java에는 Integer, Float, Double, Long의 가변형이 있습니까?
Integer와 같은 가변 버전을 사용하고 싶은 상황입니다.아래 클래스를 사용해야 합니까? 아니면 Java에 기본 제공이 있습니까?
http://www.java2s.com/Code/Java/Data-Type/Amutableintwrapper.htm
항상 다음과 같은 배열로 값을 줄바꿈할 수 있습니다.int[] mutable = {1};
변환 가능한 래퍼 클래스에 코드를 포함시키는 것이 너무 번거로운 경우.
이제 JDK 1.5 Java는java.util.concurrent.atomic.AtomicInteger
다음은 스레드 세이프 가변 정수입니다.사용 예시는 다음과 같습니다.
final AtomicInteger value = new AtomicInteger(0);
그 후,
value.incrementAndGet();
아니요, Java에는 이러한 기능이 내장되어 있지 않습니다.그리고 그것은 이유가 있다.변이형을 사용하는 것은 오용되기 쉽기 때문에 위험하다.게다가 실장도 매우 간단합니다.예를 들어 commons-lang에는 가 있습니다.
다음은 가변 정수를 위해 만든 작은 클래스입니다.
public class MutableInteger {
private int value;
public MutableInteger(int value) {
this.value = value;
}
public void set(int value) {
this.value = value;
}
public int intValue() {
return value;
}
}
이것을 다른 원시적인 것으로 쉽게 확장할 수 있습니다.물론 모두가 말하는 것처럼 신중하게 사용해야 합니다.
@Alexandre가 제안하는 것처럼 nnn[]를 모든 프리미티브타입의 가변 오브젝트로 사용할 수 있습니다.java에는 AtomicInteger와 AtomicLong도 있습니다.
IMHO int는 보통 Integer보다 더 나은 선택이며, 이는 가변입니다.
여러 개체가 필요한 이유에 대해 더 자세히 설명해 주시겠습니까? 같은 작업을 수행하는 다른 방법이 있을 수 있습니다.
AtomicInteger
는 이미 언급되어 있습니다.변이 가능Double
는 에뮬레이트 할 수 있습니다.AtomicReference<Double>
이미 언급한 경고가 적용되어 잘못된 스타일입니다만, 이러한 코드가 있는 경우가 있습니다.
double sum=0
for (Data data:someListGenerator())
sum+=data.getValue()
기능적인 Java 8 스타일로 리팩터링하고 싶다.코드가 이 패턴을 따르지만 상당히 복잡해진다면 가장 합리적인 변환은 다음과 같습니다.
AtomicReference<Double> sumref=new AtomicReference<>(0d);
someStreamGenerator().forEach(data->
sumref.set(sumref.get().doubleValue()+data.getValue()));
double sum=sumref.get().doubleValue();
물론 이것은 적어도 의심스러운 스타일이다.하지만 난 내가 한 번 이상 비틀린 상황에 처했다는 걸 알았어ResultSet
컴퓨팅과 부분적인 축적을 통해 세 가지 다른 정보를 얻을 수 있습니다.따라서 코드를 적절한 기능 스타일로 변환하는 것이 매우 어렵습니다.상기 패턴에 따라 누적 부품을 변환하는 것은 클린 코드와 지나치게 단순화된 리팩터링 사이의 합리적인 트레이드오프인 것처럼 보였다.
org.omg를 가져올 수 있습니다.CORBA 패키지(또는 필요한 클래스만)에서 홀더 클래스를 사용할 수 있습니다.
예를 들어, 정수를 저장하는 필드가 공용인 "IntHolder"를 사용하여 정수를 수정할 수 있습니다.
public static void triple(IntHolder x){
x.value = 3 * x.value;
}
IntHolder mutableInt = new IntHolder(10);
triple(mutableInt);
System.out.println(mutableInt.value);
'롱홀더'와 '더블'도 있다.홀더' 및 기타 사용할 수 있는 수 많은 기타.주의하여 사용하십시오.
여기 api가 있습니다.https://docs.oracle.com/javase/7/docs/api/org/omg/CORBA/package-summary.html
언급URL : https://stackoverflow.com/questions/4520137/does-java-have-mutable-types-for-integer-float-double-long
'itsource' 카테고리의 다른 글
MariaDB - 두 개의 외부 키로 테이블을 만들 수 없습니다. (0) | 2022.11.24 |
---|---|
TokuDB 쿼리에서 임시 테이블을 만드는 속도가 너무 느립니다. (0) | 2022.11.24 |
Larabel Altural을 사용하여 마지막으로 삽입된 ID 가져오기 (0) | 2022.11.24 |
Android의 AsyncTask에서 값 반환 (0) | 2022.11.24 |
느린 SecureRandom 제너레이터에 대처하는 방법 (0) | 2022.11.24 |