【问题标题】:My is my method not defined for the class?我的方法不是为班级定义的吗?
【发布时间】:2021-01-12 12:41:33
【问题描述】:

我在编程方面有点缺乏经验,因此可能很愚蠢。 但是我在以下方法中遇到了问题:

import java.util.Set;

public class Launcher 
{
    

        public static void printEntries(ReadableMap<String, Integer> a)
        {
           Set<String> b = a.keysAsSet();
            try
                {
                    for(String i : b)
                    {
                            if(i != null)
                            {
                                getOrThrow(i);
                            }
                            System.out.println(i + ": " + getOrThrow(i));
                    } 
                }
                catch(UnknownKeyException z)
                    {
                        throw new UnknownKeyException();
                        System.out.println("Eine UnknownKeyException ist aufgetreten.");
                    }
        }

}

没有为 Launcher 类型定义方法 getOrThrow(String)。

这里有一些可能有用的代码 sn-ps:

public interface ReadableMap<K, V> {

    
    public abstract V getOrThrow(K key) throws UnknownKeyException;
}

public abstract class AbstractReadableMap<K, V> implements ReadableMap<K, V> 
{  
        
protected Entry<K, V>[] entries;


public V getOrThrow(K k) throws UnknownKeyException 
        {
            for(Entry<K, V> i : entries) 
            {
                if(i.getValue() != null && i.getKey().equals(k)) 
                {
                    return i.getValue();
                }
            }
            throw new UnknownKeyException();
        }
}

为什么会这样,我该如何解决?

我非常感谢任何形式的帮助。 提前谢谢!

【问题讨论】:

  • 方法getOrThrow 被定义为ReadableMap 上的实例方法。这意味着要调用它,您需要在ReadableMapinstance 上调用它。在您的示例中,您将 a 作为参数。如果您拨打a.getOrThrow(i); 会发生什么? (我的意思是,它不太可能抛出,因为您当时正在迭代 keySet......但仍然......)
  • 没问题。如果它解决了您的问题,请随时投票并接受下面@Jems 的回答。它可能比评论版本更有用(我只是没有时间尝试运行您的代码以检查实际上是 问题)。

标签: java methods interface abstract defined


【解决方案1】:

这里对getOrThrow(i) 的调用隐含为Launcher.getOrThrow(i) - 换句话说,它正在调用属于Launcher 类的方法。您可能想调用a.getOrThrow(i),因为a 是一种确实实现了该方法的类型ReadableMap

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 2017-06-12
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多