Java 该怎么办;未选中对泛型类的调用?“;

Java 该怎么办;未选中对泛型类的调用?“;,java,generics,javac,Java,Generics,Javac,我有这门课: package Main; public abstract class Click123<T extends java.awt.Component> //////////////// { boolean debugging = false; public abstract void singleClick(java.awt.event.MouseEvent e); //////////////// public abstract void doubl

我有这门课:

package Main;

public abstract class Click123<T extends java.awt.Component>  ////////////////
{

  boolean debugging = false;

  public abstract void singleClick(java.awt.event.MouseEvent e); ////////////////
  public abstract void doubleClick(java.awt.event.MouseEvent e); ////////////////
  public abstract void tripleClick(java.awt.event.MouseEvent e); ////////////////
  public abstract void manyClick(java.awt.event.MouseEvent e);   ////////////////
  public abstract int  getFreq();// how long thread sleeps; i.e., click interval

  public Click123(T target)  ////////////////
  {
    target.addMouseListener  ////////////////
    (
      new java.awt.event.MouseAdapter()   ////////////////
      {
        Thread cp = null;

        public void mouseClicked(final java.awt.event.MouseEvent e) 
        {
          if (cp != null && cp.isAlive())
            cp.interrupt(); 

          if (e.getClickCount() == 1) 
          {
            cp =  new Thread(new ClickProcessor(new java.util.concurrent.Callable<Void>() {
              @Override public Void call() throws Exception {
                singleClick(e); //////////////////////////////////////////
                return null;
              }
            }));
            cp.start();
          }
          else if (e.getClickCount() == 2) 
          {
            cp = new Thread(new ClickProcessor(new java.util.concurrent.Callable<Void>() {
              @Override public Void call() throws Exception {
                doubleClick(e); //////////////////////////////////////////
                return null;
              }
            }));
            cp.start();
          }
          else if (e.getClickCount() == 3) 
          {
            cp =  new Thread(new ClickProcessor(new java.util.concurrent.Callable<Void>() 
            {
              @Override public Void call() throws Exception {
                tripleClick(e); //////////////////////////////////////////
                return null;
              }
              })              
            );
            cp.start();
          }
          else manyClick(e); //////////////////////////////////////////
        } // mouseClicked
      }  // new MouseAdapter
    ); // add mouseListener
  } // Click123  

  class ClickProcessor implements Runnable 
  {
    java.util.concurrent.Callable<Void> eventProcessor;

    ClickProcessor(java.util.concurrent.Callable<Void> eventProcessor) 
    {
        this.eventProcessor = eventProcessor;
    }

    @Override public void run() 
    {
      try 
      {
        System.out.println("About to sleep " + getFreq());
          Thread.sleep(getFreq()); // this value comes from implementation
          eventProcessor.call();
      } catch (InterruptedException e) { System.out.println(e);} 
        catch (Exception e)            { System.out.println(e);}
    }  // run
  }  // class ClickProcessor
} // class Click123
public class GridCell extends JTextField {

  int     row,
          col;
  char    content;
  Color   foreground,
          background;

  GridCell(){
    content = ' ';
    foreground = Color.BLACK;
    background = Color.WHITE;

    disableKeyCombo(KeyEvent.VK_A, KeyEvent.VK_C, KeyEvent.VK_V, KeyEvent.VK_X,
                                                                 KeyEvent.VK_H);

    new Click123(this) ////////// flagged warning unchecked call to Click123
    {
      @Override
      public void singleClick(MouseEvent e) {
        if(SwingUtilities.isRightMouseButton(e))
        {
          if( ! Game.getAvailable().contains("*"))
            Game.changeSMBorder(e.getComponent().getX(),
                                e.getComponent().getY());
          else
            Game.changeSbBackground(e.getComponent().getX(),
                                    e.getComponent().getY());
        }
        Game.btnClearBorders.setEnabled(true);
      }

      @Override public void doubleClick(MouseEvent e){
        if(SwingUtilities.isRightMouseButton(e))
        {
          if(btnUndo.isEnabled())
            btnUndo.doClick();
        }
      }

      @Override
      public void tripleClick(MouseEvent e) {
        if(SwingUtilities.isRightMouseButton(e))
        {
          if(btnRedo.isEnabled())
            btnRedo.doClick();
        }
      }

      @Override
      public void manyClick(MouseEvent e) {
      }

      @Override
      public int getFreq() {
        return CLICK_FREQUENCY;
      }
    };    
  }
  ... class goes on much further
}

如果有的话,我能/应该做什么

看起来您没有完全使用泛型。请尝试:

new Click123<GridCell>(this)
newclick123(此)

看起来您没有完全使用泛型请尝试:

new Click123<GridCell>(this)
newclick123(此)

看起来您没有完全使用泛型请尝试:

new Click123<GridCell>(this)
newclick123(此)

看起来您没有完全使用泛型请尝试:

new Click123<GridCell>(this)
newclick123(此)

尝试更改

new Click123(this)

newclick123(此)
Click123
是一个泛型类,这意味着它有一个类型参数,写在尖括号之间。对于
Click123
,类型参数
T
必须是
Component
的子类,而
GridCell

应避免使用原始类型,如
List
Set
。原始类型是在没有类型参数的情况下使用的泛型类型。当引入泛型时,原始类型只允许与泛型之前编写的代码兼容

然而,看看你的类,似乎没有理由认为
Click123
应该是泛型的。构造函数不能只接受一个
组件而不是
t

尝试更改吗

new Click123(this)

newclick123(此)
Click123
是一个泛型类,这意味着它有一个类型参数,写在尖括号之间。对于
Click123
,类型参数
T
必须是
Component
的子类,而
GridCell

应避免使用原始类型,如
List
Set
。原始类型是在没有类型参数的情况下使用的泛型类型。当引入泛型时,原始类型只允许与泛型之前编写的代码兼容

然而,看看你的类,似乎没有理由认为
Click123
应该是泛型的。构造函数不能只接受一个
组件而不是
t

尝试更改吗

new Click123(this)

newclick123(此)
Click123
是一个泛型类,这意味着它有一个类型参数,写在尖括号之间。对于
Click123
,类型参数
T
必须是
Component
的子类,而
GridCell

应避免使用原始类型,如
List
Set
。原始类型是在没有类型参数的情况下使用的泛型类型。当引入泛型时,原始类型只允许与泛型之前编写的代码兼容

然而,看看你的类,似乎没有理由认为
Click123
应该是泛型的。构造函数不能只接受一个
组件而不是
t

尝试更改吗

new Click123(this)

newclick123(此)
Click123
是一个泛型类,这意味着它有一个类型参数,写在尖括号之间。对于
Click123
,类型参数
T
必须是
Component
的子类,而
GridCell

应避免使用原始类型,如
List
Set
。原始类型是在没有类型参数的情况下使用的泛型类型。当引入泛型时,原始类型只允许与泛型之前编写的代码兼容


然而,看看你的类,似乎没有理由认为
Click123
应该是泛型的。构造函数不能只取一个
组件而不是一个
t

在我之前在类似上下文中提出的一个问题中,一个答案表明了这一点。我说我会研究它(因为我已经根据另一个答案实现了通用版本),但我没有。我会调查的!!:^)谢谢。如果我从
公共抽象类Click123
中删除
,我必须从
公共Click123(T target)
中删除
T target
,因此我必须从
目标中删除
target
。addMouseListener
,这会产生错误。然后呢?@DSlomer64不要删除目标
t
。将其替换为
java.awt.Component target
@pbabcdefp--谢谢。我只是没有马上“明白”。同样,很明显,现在有人指出了这一点。谢谢你这么做。在我之前在类似情况下提出的一个问题中,一个答案表明了这一点。我说我会研究它(因为我已经根据另一个答案实现了通用版本),但我没有。我会调查的!!:^)谢谢。如果我从
公共抽象类Click123
中删除
,我必须从
公共Click123(T target)
中删除
T target
,因此我必须从
目标中删除
target
。addMouseListener
,这会产生错误。然后呢?@DSlomer64不要删除目标
t
。将其替换为
java.awt.Component target
@pbabcdefp--谢谢。我只是没有马上“明白”。同样,很明显,现在有人指出了这一点。谢谢你这么做。在我之前在类似情况下提出的一个问题中,一个答案表明了这一点。我说我会研究它(因为我已经根据另一个答案实现了通用版本),但我没有。我会调查的!!:^)谢谢。如果我从
公共抽象类Click123
中删除
,我必须从
公共Click123(T target)
中删除
T target
,因此我必须从
目标中删除
target
。addMouseListener
,这会产生错误。然后呢?@DSlomer64不要删除目标
t
。将其替换为
java.awt.Component target
@pbabcdefp--谢谢。我只是没有马上“明白”。同样,很明显,现在有人指出了这一点。谢谢你这么做。在我之前在类似情况下提出的一个问题中,一个答案表明了这一点