Type Class Is Not Generic - It Cannot Be Parameterized With Arguments
May 16, 2008
I have set up a project in Eclipse 3.1 and am using java 5.0 compiler.
Here's my folder structure in Eclipse
Java Code:
DFSRemoteClientTestClient.java mh_sh_highlight_all('java');
DFS is the project in Eclipse
And this is how it looks my java class
Java Code:
package RemoteClient;
import java.util.*;
// other imports
public class TestClient {
public static void main(String [] args) throws ServiceInvocationException {
// business logic here ....
}
} mh_sh_highlight_all('java');
So, basically, my java class is just a simple class with a main function.
Now when I build my project, using Project->Clean...
Then I get this as an error at the very first line where i specify the package
This is the error:
Java Code: The type Class is not generic; it cannot be parameterized with arguments <T> mh_sh_highlight_all('java');
It is important to note that the inference algorithm uses only invocation arguments, target types, and possibly an obvious expected return type to infer types. The inference algorithm does not use results from later in the program.
Got a problem with generics, which I'm still pretty new at. Here's a program that compiles fine:
import java.util.ArrayList; import javax.swing.JComponent; public class Experiments { public static void main(String[] args) { ListHolder holder = new ListHolder();
[Code] ....
It's useless, but it compiles. If I change Line 14, however, to add a generic type parameter to the ListHolder class, Line 10 no longer compiles:
import java.util.ArrayList; import javax.swing.JComponent; public class Experiments { public static void main(String[] args) { ListHolder holder = new ListHolder();
[Code] ....
I get this error:
Uncompilable source code - incompatible types: java.lang.Object cannot be converted to javax.swing.JComponent at experiments.Experiments.main(Experiments.java:10)
Apparently, the introduction of the type parameter leaves the compiler thinking that aList is of type Object. I can cast it, like this:
JComponent c = ((ArrayList<JComponent>)holder.aList).iterator().next();
That makes the compiler happy, but why is it necessary? How does adding the (unused) type parameter to the ListHolder class end up making the compiler think the aList member of an instance of ListHolder is of type Object?
1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class MyList<E> { 5 6 public List<E> list; 7 public int length;
[code]...
I am trying to define a class MyList, which i just a wrapper around an ArrayList, no real purpose, just for the sake of learning Generics. Idea here is that I create a parameterized class, MyList<E>, which holds a parameterized instance var of type List<E>. I have an add method which adds an element of type E to the List<E>. If I create an instance of MyList, call it 'm', for some reason when I try to call a method on that instance the compiler complains that 'm' cannot be found.
Generic methods are methods that introduce their own type parameters. This is similar to declaring a generic type, but the type parameter's scope is limited to the method where it is declared. Static and non-static generic methods are allowed, as well as generic class constructors.
1. The method is only exclusively to be used for the declared argument parameter? For example given a generic method:public static <String, Integer> boolean method(Pair<K, V> p1) {}I could only invoke the method if Pair argument parameter is <String, Integer>?
Is this the proper way to add to a generic list? My code works just fine, but I got this feeling that there might be some kind of flaw in it or something. Is this pretty much the basic way to add any type of data to a generic list?
import java.util.LinkedList; public class ListOfGeneric<E> { private LinkedList<E> myList;
I am totally new to Java. What is the purpose of this method?
Flow of the int x=3; like where does the 3 go step by step?
Passing Primitive Data Type Arguments (from oracle java tutorials)
Primitive arguments, such as an int or a double, are passed into methods by value. This means that any changes to the values of the parameters exist only within the scope of the method. When the method returns, the parameters are gone and any changes to them are lost. Here is an example:
public class PassPrimitiveByValue { public static void main(String[] args) { int x = 3; // invoke passMethod() with // x as argument passMethod(x);
Primitive arguments, such as an int or a double, are passed into methods by value. This means that any changes to the values of the parameters exist only within the scope of the method. When the method returns, the parameters are gone and any changes to them are lost.
Reference data type parameters, such as objects, are also passed into methods by value. This means that when the method returns, the passed-in reference still references the same object as before. However, the values of the object's fields can be changed in the method, if they have the proper access level.For example, consider a method in an arbitrary class that moves Circle objects:
public void moveCircle(Circle circle, int deltaX, int deltaY) { // code to move origin of // circle to x+deltaX, y+deltaY circle.setX(circle.getX() + deltaX); circle.setY(circle.getY() + deltaY);
// code to assign a new // reference to circle circle = new Circle(0, 0); }
Let the method be invoked with these arguments: moveCircle(myCircle, 23, 56)
Inside the method, circle initially refers to myCircle. The method changes the x and y coordinates of the object that circle references (i.e., myCircle) by 23 and 56, respectively. These changes will persist when the method returns. Then circle is assigned a reference to a new Circle object with x = y = 0. This reassignment has no permanence, however, because the reference was passed in by value and cannot change. Within the method, the object pointed to by circle has changed, but, when the method returns, myCircle still references the same Circle object as before the method was called.
I am following this article [URL] .... till now I have made some code
This is my Interface
public interface Comparable<T> { public int compareTo(T o); }
And this is my class where I am using Bound Type Parameter on Generic Methods
public class GenericMethodBoundType { public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) { int count = 0; for (T e : anArray)
[Code] .....
What else I need to do both in main method and at what parameterized types I need to pass at the class?
public class CollisionManager<T> { private boolean collision = false; private T mainEntity; public <T extends Entities> void handleCollision(T mainEntity, T secondEntity){ this.mainEntity = mainEntity; // This is illegal. } }
Why "this.mainEntity = mainEntity" is incorrect and also show me the correct way to achieve this?
The error I am getting is "Type mismatch: cannot convert T to T"
I have the following code in which I am looping through the rows of one array (composed of Strings) and copying it to another array. I am using .clone() to achieve this and it seems work as it changes the memory location of the rows themselves. I did notice that the String objects are still pointing to the same location in memory in both arrays but I won't worry about that for now, at the moment I just want to understand why the array I am cloning is not successfully assigning to the other array.
This is the incorrect line: ar[r] = maze[r].clone();
I've implemented Stack on the base of the LinkedList. It works as i expect it to work, but then i tried to made it compatible with foreach loop. I've implemented Iterable and Iterator. Code compiles and works fine, but does not return any output. It looks like while working with foreach, next() is not called at all. If i`m getting iterator from instance and try to do iterator.next(), i get output as expected.
public class genericStack<T> implements Iterator<T>, Iterable<T> { private LinkedList<T> LL ; protected genericStack() { this.LL = new LinkedList<T>(); } public static void main(String[] args) {
package com.Lists; public class EmployeeOffice implements EmpInterface { private double salary; private String name; private String postion; private double hoursWorked;
[Code] .....
So if i wanna sort this Generic class using comaparator what do i do... I cant find an answer to this... I wanna sort them on the basis of salary what to do ...
There is a sentence in JLS 7 which I can't figure it out. It says :
A cast from a type S to a parameterized type T is unchecked unless at least one of the following conditions holds: -S <: T -All of the type arguments (ยง4.5.1) of T are unbounded wildcards -T <: S and S has no subtype X other than T where the type arguments of X are not contained in the type arguments of T.
Condition one and two I got it. But the number three is really bugging me. I write some code in order to try to understand it.
class G<X>{} class D<T,U> extends G<T>{} G<String> g = new G<>(); D<String, Integer> dd = (D<String, Integer>) g;
In Eclipse I got no warning but it shouldn't give one ?
Because g has others subtypes than D<String, Integer> (e.g. D<String, List> , D<String, G>)
Am I missing something about the contained type arguments ?
I am trying to use a custom class in a .jsp page, as part of a course I am taking on Web Technologies.The original version of the jsp page was working fine, until I moved part of the Java code to a separate class.Here is the original .jsp code that is working:
I'm really new to object/class concepts and already having difficulties with applying them. How to create and return an array of Exam objects? I need to get a data from a textfile which is passed to the method.
Java Code:
public Exam(String firstName, String lastName, int ID, String examType, int score) { this.firstName = firstName; this.lastName = lastName; this.ID = ID; this.examType = examType; this.score = score;
I'm really new to object/class concepts and already having difficulties with applying them. how to create and return an array of Exam objects? I need to get a data from a textfile which is passed to the method.
public Exam(String firstName, String lastName, int ID, String examType, int score)
public class Class1 extends AbstractClass { //stuff } public class Class2 extends AbstractClass { //stuff }
within another class I have a private variable with the type of the Abstract class, and within one of the methods I assign an object to the the variable like this:
public class Test { private AbstractClass temp; public testMethod(){ Class1 anObject = new Class1(); temp = anObject; } }