我认为以下内容没有任何区别:
Object o = new LinkedList<Long>();
System.out.println(o instanceof List);
System.out.println(o instanceof List<?>);
Run Code Online (Sandbox Code Playgroud)
是否有任何实际用途,instanceof List<?>何时instanceof List不能使用而反之亦然?
我试图TextView通过迭代LinearLayout视图和使用来设置所有的字体instanceof.
表格目前由4个TextView和1个组成Button.
下面的代码是检测所有Views,甚至Button是一个TextView?
/* Set fonts */
LinearLayout ll = (LinearLayout) findViewById(R.id.ll_screenincourse_wrapper);
for (int i = 0; i < ll.getChildCount(); i++) {
View v = ll.getChildAt(i);
if (v instanceof TextView) {
((TextView) v).setTypeface(Fonts.get3dDumbFont(this));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我记录每个视图的类名,它将返回TextView和Button,因此我知道正在拾取正确的控件.
问题是正在设置Button和TextView的字体,我只想要TextView的.
我找到了一个解决方法,即做以下操作,但我很感兴趣为什么上面的代码不能按预期工作.
/* Set fonts */
LinearLayout ll = (LinearLayout) findViewById(R.id.ll_screenincourse_wrapper);
for (int i = 0; i < ll.getChildCount(); i++) {
View v = ll.getChildAt(i);
if …Run Code Online (Sandbox Code Playgroud) 基本上我想检查一个类是否是提供的接口的实例.
我有一个带有此签名的方法:
public ICard draw(Class<? extends ICardType> type)
Run Code Online (Sandbox Code Playgroud)
然后我试着这样做,但它被标记为错误;
if (deck.get(i) instanceof type)
Run Code Online (Sandbox Code Playgroud)
NetBeans将此作为错误:
找不到符号
符号:类类型位置:类simple.marauroa.client.extension.cardgame.impl.DefaultDeck
我甚至从其他一个问题中尝试过这个问题:
deck.get(i).isAssignableFrom(type)
Run Code Online (Sandbox Code Playgroud)
我看到了以下问题:以编程方式检查.class文件是否扩展了特定类,以及如何检查作为Class对象的参数的instanceof?但他们不符合我的情况.
任何提示或想法?我知道我在某个地方犯了一个愚蠢的错误.
我有两节课:
class ItemInfo {
public View createItemView() {
View v;
// ...
v.setTag(this);
return v;
}
}
class FolderInfo extends ItemInfo {
@Override
public View createItemView() {
View v;
// ...
v.setTag(this);
return v;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我用它:
FolderInfo folderInfo;
// Create it here
ItemInfo itemInfo = folderInfo;
View v = itemInfo.createItemView();
Object objectTag = v.getTag();
Run Code Online (Sandbox Code Playgroud)
然后我通过instanceof检查objectTag的类型,它是ItemInfo!为什么?
现在我正在编写一个ORM框架,非常关心性能.
在本框架中,我必须使用instanceof和Class.isAssignableFrom检查类型兼容性.
所以我对instanceof和的表现有点怀疑Class.isAssignableFrom
究竟有多缓慢?
我的程序倾向于使用大量的包装异常(SwingWorker例如,包装所有异常ExecutionException).所以,我正在尝试编写一个方法,允许我检查异常或其任何原因是否instanceof是异常类型,但我不知道如何(如果可能的话)传递JUST类名作为方法的参数.
到目前为止,我有这个:
public static boolean errorOrCausesInstanceOfClass(Throwable e, Class c) {
return e != null && (e.getClass().equals(c) || (e.getCause() != null && errorOrCausesInstanceOfClass(e.getCause(), c)));
}
Run Code Online (Sandbox Code Playgroud)
但这只有在e.getClass()完全相同的情况下才有效c.getClass().但是我想检查使用instanceof以捕获子类.
有没有办法实现这个目标?
我正在使用kryonet从服务器和客户端来回发送对象.只要收到对象,就会运行一个侦听器.它似乎决定对象实例的唯一方法是使用:
if(object instanceof ClientLoginPacket){
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
我想知道什么是instanceof检查以确定对象是否属于特定类型.它检查类是否与所有代码完全相同,是否检查变量和名称?它也检查导入的包吗?你给我的任何信息都可以提供帮助.
我想知道这个的原因是因为我制作数据包的方式,服务器方法中的代码与客户端不同.例如,在我的客户端发送数据包我做:
public void send(){
Client.sendPacketTCP(this);
}
Run Code Online (Sandbox Code Playgroud)
在我的服务器上我这样做:
public void send(){
Server.sendPacketTCP(this);
}
Run Code Online (Sandbox Code Playgroud) 假设我有几个特定的类,它们都扩展了一个抽象类,如下所示:
public abstract AbstractClass {
// abstract stuff here
}
public FirstSpecificClass extends AbstractClass {
// specific stuff here
}
public SecondSpecificClass extends AbstractClass {
// specific stuff here
}
Run Code Online (Sandbox Code Playgroud)
我需要创建一个enum其他地方,其中每个条目与一个特定的类连接(关联?); 为此,我将特定的类作为构造函数参数传递并将其作为私有字段存储在枚举中(我还为该字段提供了一个getter方法).我还需要创建一个静态方法,该方法将一个特定类的实例作为参数,并返回相应的枚举元素(或null).我将通过循环每个枚举条目并instanceof与前面提到的私有字段的getter结合使用来完成此操作.这是我的尝试:
public enum Types {
FIRST(FirstSpecificClass.class), // line 2
SECOND(SecondSpecificClass.class); // line 3
private Class<AbstractClass> classType;
private Types(Class<AbstractClass> classType) {
this.classType = classType;
}
public Class<AbstractClass> getClassType() {
return this.classType;
}
public static Types fromTypeInstance(AbstractClass instance) {
for(Types t : Types.values())
if(instance instanceof t.getClassType()) return …Run Code Online (Sandbox Code Playgroud) 编译器知道这AbstractDemo是一个抽象类,而抽象类无法实例化.
但是当我调用newInstance()方法时,为什么它没有给出编译时错误?
import java.lang.reflect.Constructor;
public abstract class AbstractDemo{
public AbstractDemo(){
System.out.println("Default constructor");
}
public static void main(String args[]){
try{
/* No compilation error for this statement */
AbstractDemo demo = AbstractDemo.class.newInstance();
Constructor[] ctors = AbstractDemo.class.getDeclaredConstructors();
for ( int i=0; i < ctors.length; i++){
System.out.println(ctors[i]);
/* No compilation error for this statement too */
AbstractDemo demo1 = (AbstractDemo) ctors[i].newInstance();
}
/* Compilation error here */
// AbstractDemo demo2 = new AbstractDemo();
}catch(Exception err){
err.printStackTrace();
}
}
} …Run Code Online (Sandbox Code Playgroud) 在以下示例中
test instanceof java.util.Map返回false
测试instanceof java.util.HashMap无法编译
但
为什么?他们看起来彼此如此相似!
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.HashSet;
public class InstanceofTest {
public static class Test {}
public static void main(String[] args) {
// -- left operand references a Class instance
Test test = null;
// 1. outputs: false
System.out.println(test instanceof Map);
// 2. COMPILATION ERROR
System.out.println(test instanceof HashMap);
// -- left operand references an Interface instance
Map mymap = new HashMap();
// 3. outputs: false …Run Code Online (Sandbox Code Playgroud) instanceof ×10
java ×10
android ×2
inheritance ×2
class ×1
enums ×1
generics ×1
interface ×1
kryonet ×1
networking ×1
oop ×1
packet ×1
performance ×1
polymorphism ×1
syntax ×1
views ×1