标签: classcastexception

Java中的泛型是否避免所有ClassCastExceptins?

由于只在编译期间使用Java 5检查泛型,它们是否可以在所有情况下避免使用ClassCastExceptions?

java generics jdk1.6 classcastexception

6
推荐指数
2
解决办法
1176
查看次数

Java foreach循环中的ClassCastException

在什么情况下可以在下面的代码中发生ClassCastException:

import java.util.Arrays;
import java.util.List;

public class Generics {

    static List getObjects() {
        return Arrays.asList(1, 2, 3);
    }

    public static void main(String[] args) {
        List<String> list = getObjects();
        for (Object o : list) { // ClassCastException?
            System.out.println(o);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我们在生产环境中有类似的情况(我知道这是一种不好的做法),客户在注释行提供了带有ClassCastException的日志,但我似乎无法重现它.有什么想法吗?

我知道JVM在使用foreach时会在后台创建一个迭代器,但在某些情况下它是否可以创建一个原始Iterator,而在其他情况下它是否可以创建一个参数化迭代器?

更新:我也看了一下生成的字节码,并在Windows下使用JDK 1.6.0_21-B07无checkcast制成.有趣:)

这是主要方法:

public static void main(java.lang.String[]);
  Code:
   0:   invokestatic    #34; //Method getObjects:()Ljava/util/List;
   3:   astore_1
   4:   aload_1
   5:   invokeinterface #36,  1; //InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
   10:  astore_3
   11:  goto    28
   14:  aload_3
   15:  invokeinterface #42,  1; …

java generics foreach iterator classcastexception

6
推荐指数
1
解决办法
6261
查看次数

Java:未选中从X转换为Y /如何实现castOrNull

我已经实现了这个功能:

 static <X,Y> Y castOrNull(X obj) {
  try {
   return (Y)obj;
  }
  catch(ClassCastException e) {
   return null;
  }
 }
Run Code Online (Sandbox Code Playgroud)

这给了我编译器警告:

Type safety: Unchecked cast from X to Y
Run Code Online (Sandbox Code Playgroud)

我不太明白.这不是try/catch我在这里做的检查吗?我可以忽略这个警告吗?

我的功能是否会按预期工作?我该如何正确实现它?

我也试过obj instanceof Y检查,但由于Java处理泛型的方式,这不起作用.

顺便说一句,这个函数对我来说似乎非常有用(使其他代码更干净).我想知道Java中是否已存在这样的函数?


我想要使​​用它的一个例子:

    void removeEmptyRawStrings() {
        for(Iterator<Entity> e = entities.iterator(); e.hasNext();) {
            RawString s = castOrNull(e.next());
            if(s != null && s.content.isEmpty()) e.remove();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的代码中经常出现类似这样的情况.我认为这比其他任何东西都更具可读性和简单性.但是,如果你有任何关于如何使代码更简单的话,请给我一个更好的建议.

java casting instanceof classcastexception

6
推荐指数
1
解决办法
3918
查看次数

Hibernate java.lang.ClassCastException:org.hibernate.action.EntityIdentityInsertAction无法强制转换为org.hibernate.action.EntityInsertAction

我正在使用Hibernate和EntityManager.我用的时候

    Session session = (Session)entityManager.getDelegate();  
    session.flush();
    session.clear();
Run Code Online (Sandbox Code Playgroud)

我明白了

java.lang.ClassCastException: org.hibernate.action.EntityIdentityInsertAction cannot be cast to org.hibernate.action.EntityInsertAction
at org.hibernate.engine.ActionQueue$InsertActionSorter.sort(ActionQueue.java:636)
at org.hibernate.engine.ActionQueue.sortInsertActions(ActionQueue.java:369)
at org.hibernate.engine.ActionQueue.sortActions(ActionQueue.java:355)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:224)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
Run Code Online (Sandbox Code Playgroud)

既然它没有说明哪个实体导致问题,我就被困在这里.有谁知道是什么原因引起的?

hibernate flush entitymanager classcastexception

6
推荐指数
1
解决办法
2168
查看次数

严重:异常springSecurityFilterChain ... ClassCastException ...无法转换DelegatingFilterProxy

任何人都可以帮我解决我的tomcat运行错误,我运行tomcat时出现以下错误:

SEVERE: Exception starting filter springSecurityFilterChain
java.lang.ClassCastException: org.springframework.web.filter.DelegatingFilterProxy cannot be cast to javax.servlet.Filter
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
    at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:533)
    at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:239)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Run Code Online (Sandbox Code Playgroud)

tomcat classcastexception

6
推荐指数
2
解决办法
1万
查看次数

绑定到服务时的Android ClassCast异常

好吧,我是Android开发的新手,我正在尝试绑定到一个服务,以便我可以在服务启动后调用该服务上的方法.下面描述的Activity和Service都是同一个应用程序的一部分,因此不存在任何问题,但每次运行我的应用程序时都会出现以下错误:

java.lang.ClassCastException:android.os.BinderProxy

发生这种情况的路线是:

LocalBinder binder = (LocalBinder) service;
Run Code Online (Sandbox Code Playgroud)

我的活动代码(简化):

public class Main extends Activity {

    boolean gpsBound = false;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    /** Called whenever the activity is started. */
    @Override
    protected void onStart() {
        super.onStart();
        // Bind to GPSService
        Intent i = new Intent(this, GPSService.class);
    startService(i);
    bindService(i, connection, Context.BIND_AUTO_CREATE);
    }

    /** service binding */
    private ServiceConnection connection = new ServiceConnection() {

        public void onServiceConnected(ComponentName …
Run Code Online (Sandbox Code Playgroud)

service binding android classcastexception android-activity

6
推荐指数
2
解决办法
9820
查看次数

findViewById上的android ClassCastException

我有一个小问题,我找不到我正在犯的错误,这可能是非常简单的事情.

我有以下布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="10dp" >

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:focusable="false" />
    <ImageView
        android:id="@+id/imgStarred"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/checkBox"
        android:layout_below="@+id/checkBox"
        android:layout_marginRight="4dp"
        android:src="@drawable/ic_star_gray"/>


    <CheckedTextView
        android:id="@+id/lblTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/checkBox"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="8dp"
        android:layout_toLeftOf="@+id/imgPriority"
        android:layout_toRightOf="@+id/checkBox"
        android:text="CheckedTextView" />

    <TextView
        android:id="@+id/lblDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/lblTitle"
        android:layout_below="@+id/lblTitle"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/checkBox"
        android:text="Small Text"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <ImageView
        android:id="@+id/imgPriority"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:src="@drawable/ic_priority_5" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

当我尝试使用findViewById从中获取视图时,我得到了ClassCast异常

11-23 10:12:07.680: E/AndroidRuntime(5965): FATAL EXCEPTION: main
11-23 10:12:07.680: E/AndroidRuntime(5965): java.lang.ClassCastException: android.widget.ImageView
11-23 10:12:07.680: E/AndroidRuntime(5965):     at com.bilobait.taskbox.task.TaskBoxTaskList$TaskView.<init>(TaskBoxTaskList.java:459)
11-23 10:12:07.680: E/AndroidRuntime(5965): …
Run Code Online (Sandbox Code Playgroud)

layout android classcastexception

6
推荐指数
1
解决办法
4764
查看次数

Arrays.sort(object [])不会抛出classcastexception

码:

public class CompareTest {

    public static void main(String[] args) {

        ArrayList list =  new ArrayList();
        (list).add(new CompareTest());  


        Arrays.sort(list.toArray()); //Does not throw Exception , why ?
        Collections.sort(list);   //throws ClassCastException
    }

}
Run Code Online (Sandbox Code Playgroud)

根据Java Doc: Arrays#sort

根据元素的自然顺序,将指定的对象数组按升序排序.数组中的所有元素都必须实现Comparable接口.

为什么阵列#sort,ClassCastException不像JavaDoc所说的那样抛出?

java arrays sorting comparable classcastexception

6
推荐指数
1
解决办法
539
查看次数

Primefaces数据表日期范围过滤器与filterFunction

我在primefaces 5.0上使用datatable的filterFunction方法.我想按列标题上的日期范围过滤生日.

在浏览器控制台上,我收到此错误:

<?xml version="1.0"
   encoding="utf-8"?><partial-response><error><error-name>java.lang.ClassCastException</error-name><error-message><![CDATA[javax.faces.component.UIPanel
   cannot be cast to
   javax.faces.component.ValueHolder]]></error-message></error></partial-response>
Run Code Online (Sandbox Code Playgroud)

数据表:

 <p:dataTable var="person" value="#{testDateRange.persons}"
              id="personTable" paginator="true" styleClass="customTableStyle" editable="true"
              rows="10"  resizableColumns="true"
              emptyMessage="No persons"
              filteredValue="#{testDateRange.filteredPersons}"
              widgetVar="dateRangeWidget" >

     <p:column id="nameId" filterBy="name" sortBy="name" filterMatchMode="contains" headerText="Name">
         <h:outputText value="#{person.name}" />
     </p:column>

     <p:column id="birthdayId" headerText="birthday" filterBy="birthday" filterFunction="#{testDateRange.filterByDate}">
         <f:facet name="filter">
             <p:calendar id="from" value="#{testDateRange.dateFrom}"   styleClass="customCalendar" pattern="dd/MM/yyyy">
                 <p:ajax event="dateSelect" oncomplete="PF('dateRangeWidget').filter()" update="personTable"/>
             </p:calendar>
             <p:calendar id="to" value="#{testDateRange.dateTo}" styleClass="customCalendar" pattern="dd/MM/yyyy">
                 <p:ajax event="dateSelect" oncomplete="PF('dateRangeWidget').filter()" update="personTable"/>
             </p:calendar>
         </f:facet>
         <h:outputText value="#{person.birthday}"  >
             <f:convertDateTime pattern="dd/MM/yyyy"/>
         </h:outputText>
     </p:column>
 </p:dataTable>
Run Code Online (Sandbox Code Playgroud)

豆:

@Component("testDateRange")
@Scope("session")
public class TestDateRangeBean {

    private …
Run Code Online (Sandbox Code Playgroud)

datatable classcastexception primefaces jsf-2

6
推荐指数
2
解决办法
3万
查看次数

Java类加载器跟踪

我的webapplication抛出以下ClassCastException:

java.lang.ClassCastException: org.postgresql.jdbc4.Jdbc4ResultSetMetaData
cannot be cast to org.postgresql.jdbc4.Jdbc4ResultSetMetaData
Run Code Online (Sandbox Code Playgroud)

显然这些类是相同的,所以这是一个奇怪的错误.

我发现使用-verbose:class该类Jdbc4ResultSetMetaData从两个jar文件加载,一个在我的Jetty lib/ext /目录中,另一个在我的webapplication中的/ WEB-INF/lib目录中.这些jar文件版本完全相同(md5sum完全相同)

这让我相信它确实是完全相同的类,但ClassCastException可能是由两个不同的类加载器加载同一个类引起的.

是否可以记录/跟踪使用jvm参数加载类的类加载器的名称或id?

java classloader classcastexception

6
推荐指数
0
解决办法
45
查看次数