2016-06-23 1 views
0

, 내가 쉽게 내가 잘 알고 오전 정적으로 입력 된 언어로, 그러나 다양한 유형의 값을 포함하는 목록, 예컨대 :정적 유형의 언어가 이기종 목록을 지원할 수 있습니까? 파이썬에서

[0, 1.0, '2', MyClass(3)] 

를 만들 수 있습니다, 목록은 단일 유형의 값을 포함 할 수 있습니다. 예를 들어, C++의 std::vector<T>T 유형의 값만 보유 할 수 있습니다. C#의 List<T>도 비슷합니다.

정적 유형 언어가 이기종 목록을 지원할 수 있습니까? 그렇다면 어떤 언어가 그런 지원을합니까?

+0

'boost :: any' 유형의 목록을 가질 수 있습니다. 'any'는 C++ 17의 표준으로 받아 들여졌지만 구현이 가능한지 확실하지 않습니다. 요소에 아무 것도 저장할 수 있도록 형식 지우기라는 기술을 사용합니다. 이것에 대한 단점은 내가 아는 한 항목이 사전 정의 된 인터페이스를 준수해야하거나 사용하기 전에 캐스트해야한다는 것입니다. –

답변

0

예, 자바는 유형 Object를 사용하여이 작업을 수행 할 수 있지만, 나에게 자바 안티 패턴처럼 냄새와 당신은 아마 을하지 말아야 : P

package teststackoverflowquestion; 

import java.util.ArrayList; 
import java.util.List; 

public class TestStackOverflowQuestion { 

    public static void main(String[] args) { 
     List<Object> list = new ArrayList<>(); 
     list.add(10); 
     list.add(10.50); 
     list.add("blahblah"); 
     list.add(new MyClass(3)); 

     list.stream().forEach(o -> System.out.println(o.getClass() + " : " + o)); 
     System.out.println("-------------"); 
     list.stream().filter(o -> o.getClass().equals(Integer.class)) 
       .forEach(o -> System.out.println((int) o + 4)); 
    } 
} 

class MyClass { 
    int someField; 
    public MyClass(int someField) { 
     this.someField = someField; 
    } 

    @Override 
    public String toString() { 
     return Integer.toString(someField); 
    } 
} 

출력 :

클래스 java.lang.Integer의 : 10
클래스 java.lang.Double에 : 10.5
클래스 java.lang.String : blahbl 아
클래스 teststackoverflowquestion.MyClass : 3
-------------
14

+0

이 목록의 유형을 직접 쿼리 할 수 ​​있습니까? C++에서 std :: tuple의 형식은 명시 적입니다. – xaxxon

+0

나는 당신이 할 수있는 일과 할 수없는 일에 대해 실제로 확신하지 못합니다. 나는 전에 그것을 사용 해본 적이 없으며, 처음으로 그것을 시도하고 있습니다. Tbh는 Java anti-pattern처럼 악취가납니다. 기본적으로 다형성을 사용하기 때문에 컴파일 타임에 정확한 유형을 알아야한다고 생각하지 않습니다. 그것은'Object'를 타입으로 사용하기 때문에'Object'에 정의 된 호출 메소드가 당신이 할 수있는 모든 것이고, 그 정도는 아닙니다 (https://docs.oracle.com/javase/8/docs/api). /java/lang/Object.html). 하지만 그런 목록을 만들 수 있습니다 : P – Arjan

0

C++ 유형은 컴파일에 알려진해야하지만, 표준 : : 튜플을 가지고 시각.

http://en.cppreference.com/w/cpp/utility/tuple

또한, 부모 유형의 하위에 대한 포인터/참조가뿐만 아니라 수 있습니다.

목록 {fordptr, chevyptr};

관련 문제