为什么我不能从泛型参数访问属性?

主类


import java.io.File;

import java.io.IOException;

import java.awt.Font;

import java.awt.FontFormatException;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.GraphicsEnvironment;

import javax.swing.JFrame;

import javax.swing.JPanel;


public class MainClass extends JPanel{


   static final int WINDOW_WIDTH = 1600;

   static final int WINDOW_HEIGHT = 900;



   // Displays the game window.

   private static void displayGameWindow() {

      JFrame frame = new JFrame("Bandit King");

      frame.getContentPane().add(new MainClass());

      frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);

      frame.setVisible(true);

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   }



   // Imports a font.

   private static void registerFont() {

      try {

         GraphicsEnvironment ge = 

               GraphicsEnvironment.getLocalGraphicsEnvironment();

         Font f = Font.createFont(Font.TRUETYPE_FONT, new File("OLDSH.TTF"));

         ge.registerFont(f);


      } catch (IOException|FontFormatException e) {

         e.printStackTrace();

         System.out.println("ERROR loading font, switching to serif.");

         Font f = new Font("Serif", Font.PLAIN, 12);

      }

   }



   // Calls functions to display the screen

   @Override

   public void paint(Graphics g) {

      Dimension d = this.getPreferredSize();

      Graphics2D g2d = (Graphics2D) g;


      // default font settings

      String fontName = "OldStyle 1 HPLS";

      String fontType = "PLAIN";

      int[] color = {0, 0, 0};

      int fontSize = 25;


      // display game title

      String title = "Bandit King";

      int titleCentered = DisplayText.findCenter(g2d, title);

      DisplayText.displayText(g2d, 

            title, fontName, "BOLD", 

            color, 

            titleCentered, 50, 40);

      }

   }


鸿蒙传说
浏览 226回答 2
2回答

MMMHUHU

因为你行public class Portfolio<Asset>-在这里Asset(同为常用的T,U等等)只是普通的声明,并没有涉及到你的类Asset。只需<Asset>从Portfolio类声明中删除。您可以在此处找到有关 Java 泛型的更多信息:java泛型但是这本教科书涵盖了全面的信息:Java 泛型常见问题解答要实现您想要的功能,您需要将代码更改为:Portfolio<T&nbsp;extends&nbsp;Asset>和:public&nbsp;void&nbsp;buy(T&nbsp;asset)

米脂

该Assert通用型不设置任何势必Portfolio:public class Portfolio<Asset> {}就像你已经声明:public class Portfolio<Asset extends Object> {}所以泛型类型Asset有界Object并且Object没有任何title字段。你想要的是:public class Portfolio<A extends Asset> {&nbsp; &nbsp; private Map<String, A> deposit = new HashMap<>();&nbsp; &nbsp; public void buy(A a) {&nbsp; &nbsp; &nbsp; &nbsp; deposit.put(a.title, a);&nbsp; &nbsp; }&nbsp; &nbsp; public A get(String title) {&nbsp; &nbsp; &nbsp; &nbsp; return deposit.get(title);&nbsp; &nbsp; }}您必须在泛型类声明中声明上限通配符,而您仅在声明具有泛型类类型的变量时才指定具体类型:Portfolio<Share> p = new Portfolio<>();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java