覆盖java中的方法,然后将对象转换为父类行为

我有一个父类A和一个子类,B和B覆盖了一个方法f,来自A. public class A { public String f() { return “A”; } } public class B extends A { … public String f() { return “B”; } public static void main(String[] args) { B b = new B(); A a = (A) b; System.out.println(bf()); //prints: B } } 我创建了一个类型为B,b的对象,并将其转换为类型A并将其分配给类型为A的变量a,然后在a上调用方法f。 现在我希望调用父类的方法,因为我正在处理类型A的对象,但事实并非如此,它调用方法的b版本(打印“B”而不是“A”)下面的代码)。 为什么会这样? 这是设计决策还是技术限制?

在java中同步对象,然后更改synchronized-on变量的值

我遇到了这样的代码 synchronized(obj) { obj = new Object(); } 有些事情对此感觉不对,我无法解释,这段代码是好的还是有什么问题,请指出来。 谢谢

java中的网络通信加密

我和朋友正在开发一个带有客户端/服务器的Java游戏 – 架构。 它运作良好,但我遇到了一个问题。 我们使用TCP套接字在服务器和客户端之间建立联网。 我们的网络协议没有加密,只能由不愿看流的人阅读。 我们考虑过如何在其中应用某种加密技术来隐藏登录信息并阻止人们编写自己的客户端。 但是添加/减少字节等基本内容似乎很容易理解。 用于加密游戏网络通信(或至少游戏登录信息)的常用方法是什么? 在java中编写服务器和客户端,是否有任何有用的Java库?

获取javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure错误

我正在尝试使用Java-pns向iPhone发送推送通知但我收到以下错误 – javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure 我的代码是 – String token=”95076d2846e8979b46efd1884206a590d99d0f3f6139d947635ac4186cdc5942″; String host = “gateway.sandbox.push.apple.com”; int port = 2195; String payload = “{\”aps\”:{\”alert\”:\”Message from Java o_O\”}}”; NotificationTest.verifyKeystore(“res/myFile.p12”, “password”, false); KeyStore keyStore = KeyStore.getInstance(“PKCS12”); keyStore.load(getClass().getResourceAsStream(“res/myFile.p12”), “password”.toCharArray()); KeyManagerFactory keyMgrFactory = KeyManagerFactory.getInstance(“SunX509”); keyMgrFactory.init(keyStore, “password”.toCharArray()); SSLContext sslContext = SSLContext.getInstance(“TLS”); sslContext.init(keyMgrFactory.getKeyManagers(), null, null); SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket(host, port); String[] […]

如何在多个项目选择的java swing中创建一个下拉列表?

我知道JList和JComboBox 。 我需要具有JList提供的多种选择function的combobox下拉function。 这是因为列表的内容太大而无法使用简单列表显示。 我还需要选择多个项目,否则我会满足于JComboBox 。 有什么建议么?

在java中使用long as ArrayList索引

我正在编写这个java程序,使用Sieve of Eratosthenes找到所有素数达到num,但是当我尝试编译时,它说我不能使用long var作为数组索引,并且它期望一个int var in它的地方。 但我会使用大数字,所以我不能使用int。 我能做什么? import java.util.*; import java.lang.*; public class t3{ public static void main(String[] args){ long num = 100; //declaring list and filling it with numbers ArrayList numlist = new ArrayList(); for(long x=2 ; x<num ; x++){ numlist.add(new Long(x)); } //sieve or eratosthenes for(long x=0 ; x<Math.sqrt(num) ; x++){ for(long […]

JPA复合主键

我的JPA模型中有以下类(省略了getter,setter和不相关的字段): @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Currency { @Id private Integer ix; } @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; } 我需要定义一个类Price ,这样当从类生成DDL时,相应表的主键由Product和Currency的键组成。 我尝试过以下方法: @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @IdClass(PricePK.class) public class Price { @Id @ManyToOne(optional = false) private Product product; @Id @ManyToOne(optional = false) private Currency […]

在Switch语句中使用Integer

出于各种商业原因,我想在我的一个类中保留一些静态ID。 它们最初是int但我想将它们更改为Integer所以我可以对它们做一个等号(即避免NPE的MY_ID.equals(..) ) 当我将它们更改为Integer时,我的switch语句中出现错误。 文档说Integer在Switch中应该没问题。 去引用 [Switch]也适用于枚举类型(在枚举类型中讨论),String类,以及一些包含某些基本类型的特殊类:Character,Byte,Short和Integer(在Numbers和Strings中讨论)。 在下面的代码中,如果我是一个int那么它编译。 当它是一个Integer它并不是说需要一个constant expression is required 。 我尝试过.intValue()但这也不起作用。 我真的很蠢吗? 或完全误读文档 ? private static final Integer i = 1; @Test public void test() { switch(mObj.getId()){ case i: //do something default: //do something default } } 感谢您的任何指示。 暂时我将它们保持为int并执行new Integer(myint).equals(…)

保存到属性文件转义:

当我存储属性文件时,有谁知道为什么冒号会被转义? 我这样做: Properties prop = new Properties(); // Set the properties value. prop.setProperty(“url”,”http://localhost:7101/test/home”); 并存储使用: prop.store(new FileOutputStream(propFile), null); 它正在工作,但由于某些原因输出冒号逃脱: url=http\://localhost\:7101/test/home 有人知道修复吗?

int数组到BufferedImage

我正在使用Robot类进行打印,我将BufferedImage转换为int数组。 然后我想将int数组转换回bufferedimage,但这会产生错误。 这是我的代码: Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); BufferedImage printscreen = robot.createScreenCapture(new Rectangle(screen)); int[] pixels = ((DataBufferInt) printscreen.getRaster().getDataBuffer()).getData(); BufferedImage image = new BufferedImage(screen.width, screen.height, BufferedImage.TYPE_INT_RGB); WritableRaster raster = (WritableRaster) image.getRaster(); raster.setPixels(0, 0, screen.width, screen.height, pixels); 但我收到错误: ArrayIndexOutOfBoundsException: 2073600但为什么? 我在这一行得到了例外: raster.setPixels(0, 0, screen.width, screen.height, pixels); 编辑:如果我将第二个bufferedimage类型更改为TYPE_BYTE_GRAY,它正在工作。