Java 类型转换

Java 类型转换,java,types,Java,Types,我有 (课堂上没有给出键入T。您在“类似于此的内容”下的建议将正确运行。只要使用它。有两种可能的解决方案: 在方法上定义泛型类型: public class MyClass{ private HashMap<Key<?>, Val<?>> myMap; public Val<T> getValue(Key<T> key) { return (Val<T>) myMap.get(key)

我有


(课堂上没有给出键入
T

您在“类似于此的内容”下的建议将正确运行。只要使用它。

有两种可能的解决方案:

  • 在方法上定义泛型类型:

    public class MyClass{
        private HashMap<Key<?>, Val<?>> myMap;
        public Val<T> getValue(Key<T> key) {
            return (Val<T>) myMap.get(key) 
        }
    
    公共类MyClass{
    私有HashMap>myMap;
    public Val getValue(Key){
    return(Val)myMap.get(key)
    }
    
  • 在类上定义泛型类型:

    public class MyClass{
        private HashMap<Key<?>, Val<?>> myMap;
        public <T> Val<T> getValue(Key<T> key){
            return (Val<T>) myMap.get(key) 
        }
    
    公共类MyClass{
    私有HashMap>myMap;
    public Val getValue(Key){
    return(Val)myMap.get(key);
    }
    }
    

  • 它不起作用,因为T只能在类中定义。在这里,T必须在每次执行函数时定义,而不是在编译期间。您尝试过吗?考虑到泛型的规则,我想会的。我尝试过。T类有问题。找不到符号T。我确切地知道您需要做什么!您在哪里声明您的类,而不是只需输入类的名称,如
    public class
    put
    public class extensed HashTable
    。一些键入错误,但您可以找到答案。哦,非常抱歉,我在代码中犯了一个错误。应该是myMap.get而不是“this.get”。(实际上,仔细想想——选项2甚至没有真正的意义。如果类中可以指定
    ,那么
    myMap
    将声明为
    HashMap
    。但是OP指出这是不可能的,因为
    t
    对于
    myMap
    的不同元素是不同的)@下层选民和亲密选民:请解释。我觉得这个问题很好。没有什么不清楚的,因为有一个公认的答案可以证明
    public class MyClass{
        private HashMap<Key<?>, Val<?>> myMap;
        public <T> Val<T> getValue(Key<T> key){
            return (Val<T>) myMap.get(key) 
        }
    
    public class MyClass<T> {
        private HashMap<Key<?>, Val<?>> myMap;
        public Val<T> getValue(Key<T> key) {
           return (Val<T>) myMap.get(key);
        }
    }